靜態庫與共享庫製作,及區別

2021-10-09 05:48:30 字數 531 閱讀 9712

1.庫是預編譯的目標檔案(object  files)的集合,它們可以被鏈結程序式。靜態庫以後綴為」.a」的特殊的存檔儲存,用於靜態鏈結。

在linux環境中,使用ar命令建立靜態庫檔案,生成目標檔案.o,然後生成靜態庫.a。

使用靜態庫生成的可執行檔案放在目標板中可以直接執行。

2.共享庫,也是動態庫,是在可執行程式啟動時載入到執行程式中,可以被多個執行程式共享使用,使用動態庫編譯生成的程式相對較小,但執行時需要庫檔案支援。

共享庫的製作,使用的gcc命令,首先建立object檔案,建立共享庫的輸入檔案可為.c/.cpp檔案,用命令引數-shared表示建立共享庫。

使用動態庫生成的可執行檔案,需將生成的動態庫也拷貝到目標板的連線檔案目錄。

它們的區別:

靜態庫被程式靜態鏈結於編譯時,而共享庫被動態鏈結於執行時。

靜態庫中不能包含共享庫,而共享庫中可以包含靜態庫。

當靜態庫中某個模組更新後,需要重新編譯鏈結生成相應的可執行檔案;若共享庫中某個模組更新了,只要介面沒有改變,就不需要重新編譯鏈結生成可執行檔案。

靜態庫與共享庫

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

靜態庫與共享庫

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

靜態庫與共享庫

庫library 靜態庫在編譯連線時就把庫里的 提取出來放入可執行檔案中,程式執行時不再依賴庫。動態庫在編譯連線時只記錄了要用的名字在哪個庫的檔案中,執行時才庫檔案中找這個檔案中名字 函式或變數 並且訪問它 1 靜態庫 歸檔 lib a 1 生成庫 gcc c 1.c 2.c 只編譯不連線,產生.o...