靜態庫與共享庫

2021-09-27 10:16:21 字數 1114 閱讀 9452

庫library

靜態庫在編譯連線時就把庫里的**提取出來放入可執行檔案中,程式執行時不再依賴庫。

動態庫在編譯連線時只記錄了要用的名字在哪個庫的檔案中,執行時才庫檔案中找這個檔案中名字(函式或變數)並且訪問它

1)靜態庫(歸檔)lib***.a

(1)生成庫

gcc -c ***1.c ***2.c //只編譯不連線,產生.o檔案

ar -r lib***.a ***1.o ***2.o //把.o檔案鏈結成lib***.a庫

寫乙個標頭檔案***.h,裡面放這些函式和全區變數的宣告。(全域性變數的宣告:extern int a;)

(2)使用庫

寫c語言程式user***.c,包含標頭檔案***.h,程式中可以呼叫庫的函式或庫中的全域性變數。

方式1: gcc -c user***.c

gcc user***.o lib***.a

方式2:gcc -c user***.c

gcc user***.o -l*** -l.

其中l***表示要連線lib***.a庫檔案(***為庫名),-l.表示當前目錄下(.)下找庫檔案lib***.a

2)共享庫(動態庫)lib***.so

(1)生成庫

寫c語言程式

gcc -c -fpic a.c b.c //只編譯不連線,產生.o檔案

gcc -shared -o lib***.so a.o b.o

(2)使用庫

編譯時編寫c程式user.c

方式1:gcc -c user.c

gcc use.o -l*** -l.

方式2:gcc -c user.c

gcc user.o l***,先 設定環境變數

執行時方式1:把庫檔案放到系統標準檔案目錄/usr/lib或者/lib 目錄下 ,就可以執行a.out

方式2:設定環境變數ld_library_path的值為動態庫檔案所在的目錄,然後就可以執行a.out

設定環境變數

~/.bashrc

path=$path:.

export library_path:庫檔案的路徑

export library_path:=$ library_path:動態庫檔案路徑

靜態庫與共享庫

編寫使用靜態庫 靜態庫 共享庫 是包含了目標檔案的檔案,這些目標檔案被稱為模板或成員,是可以重用的預編譯 它們以特殊的格式和乙個表或者對映儲存在一起,這個表或者對映將符號名和儲存該符號的成員名字鏈結起來。對映加速了編譯和鏈結過程,靜態庫一般以副檔名.a 代表存檔檔案,archive 命名。為了使用庫...

靜態庫與共享庫

1.靜態庫 所有編譯器都提供一種機制,將所有相關的目標檔案模組兒打包成乙個單獨的檔案,被稱為靜態庫。它可以用作來聯結器的輸入,當聯結器構造乙個輸入的可執行檔案時,它只拷貝靜態庫裡面被應用程式引用的模組兒。在unix 系統中,靜態庫以存檔 一組連線起來的可重定位目標檔案的集合,有乙個頭部來描述成員目標...

靜態庫與共享庫

庫是預先編譯好的方法的結合,是由二進位制可執行 組成,可以被載入記憶體中執行。在linux平台,庫通常放在 lib或者 usr lib中。命名 lib a 檔案格式 由眾多的可執行檔案 o 的打包 整合特點 在鏈結階段,會把整個庫中的 整合到程式中,所以最終編譯的可執行程式的大小比較大,但好處是編譯...