靜態庫與共享庫

2021-10-09 03:18:12 字數 789 閱讀 6290

庫是預先編譯好的方法的結合,是由二進位制可執行**組成,可以被載入記憶體中執行。

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