gcc基本語法格式:gcc [-選項] 原始檔 [-選項] 目標檔案,gcc編譯c程式的過程:
預處理:gcc -e hello.c hello.i。-e指定執行到預處理結束,下面類似。
編譯:gcc -s hello.i -o hello.s。
彙編:gcc -c hello.s -o hello.o。
函式庫有靜態庫和動態庫兩種,簡單來說,由.h和.c檔案來生成函式庫,編譯後,就可以在其他.c檔案中使用函式:
靜態庫的建立和使用:
將.h和.c檔案匯編成目標檔案:gcc -c libhello.c -o libhello.o。
將目標檔案歸檔,封裝成庫:ar -rc libhello.a libhello.o。
在編譯過程中使用靜態庫:gcc usehello.c -o usehello_static libhello.a。然後就可以執行程式了。
動態庫的建立和使用:
彙編生成目標檔案,和靜態庫一樣:gcc -c libhello.c。
編譯生成動態庫:gcc libhello.o -shared -w1,-soname,libhello.so -o libhello.so。
編譯程式和動態庫:gcc usehello.c -o usehello_dy -lhello -l ./ 。
執行時,也需要指明動態庫:ld_library_path=$(pwd) ./usehello_dy 。
當然還可以統一函式庫版本的使用:
gcc -c libhello.cgcc libhello.o -shared -w1,-soname,libhello.so -o libhello.so.1.0
//即生成庫可能就會有多個版本
ln -s libhello.so.1.0 libhello.so //
所以用乙個軟鏈結來更新版本,對外卻統一顯示
gcc usehello.c -o usehello_dy -lhello -l ./ld_library_path=$(pwd) ./usehello_dy
如果在執行動態庫時,不想指明庫的路徑,則有兩種方法:
在/usr/lib或者/lib目錄下,存放動態庫或其鏈結。
在etc/ld.so.conf檔案中,追加庫或者鏈結所在的路徑;然後退出儲存,執行ldconfig命令使更改生效。
工程管理器make:
語法:系統預設自動變數:
$《第乙個依賴檔案、$@目標檔案。
使用者自定義變數:變數=值——引用$(變數)。
將靜態庫用makefile完成,用make管理:
usehello_static: usehello.c libhello.agcc $
< -o $@ libhello.a
libhello.a: libhello.o
ar -rc $@ $gcc -c $rm usehello_static libhello.a libhello.o
動態庫:
usehello_dy: usehello.c libhello.sogcc $
< -o $@ libhello.so -l ./libhello.so: libhello.o
gcc $
< -shared -w1,-soname,libhello.so -o $@
libhello.o: libhello.c
gcc -c $rm usehello_dy libhello.so libhello.o
在makefile裡面寫lhello,它不認。
在linux中如何除錯C語言程式
在linux下面可以使用下面幾種形式對c語言進行除錯 1 gdb gdb program這是最原始的除錯方法,若非熟悉命令列,這種方式其實是比較麿人的。有興趣的可以參考一些我之前的博文。這裡再附一圖 gdbtui program比gdb的方式更加友好一些,但也不大好用。安裝ddd之後執行 安裝了ne...
linux中的make命令
make命令的選項和引數 k 它的作用是讓make命令在發現錯誤時仍然繼續執行,而不是在檢測到第乙個錯誤時就停下來。n 它的作用是讓make命令輸出將要執行的操作步驟,而不真正執行這些操作 f 它的作用是告訴make命令將哪個檔案作為makefile檔案。如果未使用這個選項,標準版本的make 命令...
在 Linux 中除錯 C 程式的福音 gdb
如果你是 c c 程式設計師,或者使用 fortran 和 modula 2 程式語言開發軟體,那麼你將會很樂意知道有這麼一款優秀的偵錯程式 gdb 可以幫你更輕鬆地除錯 bug 以及其它問題。在這篇文章中,我們將討論一下 gdb 偵錯程式的基礎知識,包括它提供的一些有用的功能 選項。在我們開始之前...