linux下靜態和動態鏈結庫的生成

2021-06-13 16:18:13 字數 987 閱讀 7864

靜態鏈結庫

1)  先將.c檔案編譯成.o檔案  例:gcc –c add.c

2)  用ar命令生成靜態庫  例:ar –rc libadd.a add.o

3)  注意:靜態庫命令規則為 lib+名字.a

4)  注意使用該靜態檔案時,在編譯時,要通過-i和-l指定對應的標頭檔案和庫檔案的路徑

動態鏈結庫

1)  使用命令 gcc –fpic –shared –o libadd.so add.c將原始檔編譯成動態鏈結庫

2)  使用該動態檔案時,在編譯時,把該檔案位置加在命令後面,如 gcc –o test test.c –ldl ./libadd.so;或將libadd.so複製到/usr/lib中,然後執行gcc –o test test.c –ldl libadd.so

或gcc -o test test.c -ladd ;-l 用於指定程式要鏈結的庫,-l加庫名即可,-l會自動識別庫檔案,優先鏈結動態庫,如-lusb,實際上鏈結的是libusb.a或者libusb.so;一般在/lib /usr/lib  /usr/local/lib 三個目錄中查詢

在這裡說明一下庫名和庫檔名,庫檔名為庫檔案在庫中的真實名字,比如libadd.so;而對應的庫名就是"add",要鏈結該庫檔案,只需要新增編譯引數-ladd即可

5) 使用ldd命令可以檢視程式依賴的動態庫,比如ldd test

-l -l -i三個編譯引數

1)  -l 用於指定程式要鏈結的庫,-l加檔名即可;一般在/lib /usr/lib  /usr/local/lib 三個目錄中查詢

2)  -l 用於指定動態庫檔案的位置,可以用相對路徑

3) -i 用於指定標頭檔案的位置,可以用相對路徑

載入動態庫與靜態庫在編譯時引數沒有區別,優先載入動態庫,可以使用-static強制使用靜態庫

Linux下動態鏈結庫和靜態鏈結庫

第一部分 編譯過程 預處理過程,負責標頭檔案展開,巨集替換,條件編譯的選擇,刪除注釋等工作。gcc e表示進行預處理。編譯過程,負載將預處理生成的檔案,經過詞法分析,語法分析,語義分析及優化後生成彙編檔案。gcc s表示進行編譯。彙編,是將彙編 轉換為機器可執行指令的過程。通過使用gcc c或者as...

linux 編譯靜態鏈結庫和動態鏈結庫

我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時會被連線到目標 中,程式執行時將不再需要該靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。本文主要通過舉例來說明在linux中如何建立靜態...

靜態鏈結庫和動態鏈結庫

其實再vc中,我們所用得所有api函式都封裝再下列三個dll檔案中 kernel32.dll 用於管理記憶體,程序和執行緒得各個函式 user32.dll 用於執行使用者介面任務,如視窗的建立和訊息的傳遞的各個函式 gdi32.dll 用於顯示文字和畫圖的各個函式 動態鏈結庫 我們再使用動態庫的時候...