庫是預先編譯好的方法的結合,是由二進位制可執行**組成,可以被載入記憶體中執行。
在linux平台,庫通常放在/lib或者/usr/lib中。
命名:lib***.a
檔案格式:由眾多的可執行檔案(.o)的打包
整合特點:在鏈結階段,會把整個庫中的**整合到程式中,所以最終編譯的可執行程式的大小比較大,但好處是編譯好的程式不再依賴庫的存在,除非靜態庫**發生改變需要重新編譯時。
命名:lib***.so
檔案格式:庫中方法的動態鏈結和載入資訊
整合特點:在鏈結階段,沒有將**整合到程式中,只是在相應的呼叫點做上相應的標記,在執行過程中遇到呼叫點才進行相應方法的呼叫。所以最終編譯的可執行程式大小比較小,但是執行的時候依賴庫的存在。
備註:如果同一套方法存在靜態動態兩套庫,預設使用動態庫。
在這裡舉個例子,比如說有兩個原始檔test1.c、test2.c。
1.先執行編譯指令生成可執行檔案
gcc -c test1.c
gcc -c test2.c
2.生成靜態庫
ar -cr libtest.a test1.o test2.o
gcc -shared -fpic -o libtest.so test1.c test2.c
兩條命令可以檢視:
ldd 程式名
file 程式名
gcc -o main main.c -l庫的路徑 -l庫名(注意不需要加檔案字尾)
當庫在預設路徑下(/lib、/usr/lib)可以省去-l
以上是部落格全部內容,才疏學淺,多多指教
靜態庫與共享庫
編寫使用靜態庫 靜態庫 共享庫 是包含了目標檔案的檔案,這些目標檔案被稱為模板或成員,是可以重用的預編譯 它們以特殊的格式和乙個表或者對映儲存在一起,這個表或者對映將符號名和儲存該符號的成員名字鏈結起來。對映加速了編譯和鏈結過程,靜態庫一般以副檔名.a 代表存檔檔案,archive 命名。為了使用庫...
靜態庫與共享庫
1.靜態庫 所有編譯器都提供一種機制,將所有相關的目標檔案模組兒打包成乙個單獨的檔案,被稱為靜態庫。它可以用作來聯結器的輸入,當聯結器構造乙個輸入的可執行檔案時,它只拷貝靜態庫裡面被應用程式引用的模組兒。在unix 系統中,靜態庫以存檔 一組連線起來的可重定位目標檔案的集合,有乙個頭部來描述成員目標...
靜態庫與共享庫
庫library 靜態庫在編譯連線時就把庫里的 提取出來放入可執行檔案中,程式執行時不再依賴庫。動態庫在編譯連線時只記錄了要用的名字在哪個庫的檔案中,執行時才庫檔案中找這個檔案中名字 函式或變數 並且訪問它 1 靜態庫 歸檔 lib a 1 生成庫 gcc c 1.c 2.c 只編譯不連線,產生.o...