Linux中C程式除錯 makefile

2022-08-24 09:00:13 字數 1784 閱讀 8335

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.c

gcc 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.a

gcc $

< -o $@ libhello.a

libhello.a: libhello.o

ar -rc $@ $gcc -c $rm usehello_static libhello.a libhello.o

動態庫:

usehello_dy: usehello.c libhello.so

gcc $

< -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 偵錯程式的基礎知識,包括它提供的一些有用的功能 選項。在我們開始之前...