庫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 的打包 整合特點 在鏈結階段,會把整個庫中的 整合到程式中,所以最終編譯的可執行程式的大小比較大,但好處是編譯...