鏈結 靜態庫 共享庫

2021-07-10 14:31:43 字數 550 閱讀 1565

編譯器生成可重定位目標檔案 .o

鏈結器,將不同的可重定位檔案,進行符號解析,重定位等操作。鏈結到一起。生成最終的可執行檔案。

編譯器生成的目標檔案,從位址0開始。重定位操作,將不同的模組中的位址,與最終記憶體位址對應。

將庫檔案拷貝,嵌入可執行檔案中。鏈結發生在編譯期間,程式執行之前。生成的最終程式中,包含所引用的靜態庫部分的乙份拷貝。

缺點:

當靜態庫更新的時候,如果想使用新版本的庫,必須重新鏈結。

動態聯結器執行動態鏈結。

動態鏈結發生在執行期。編譯生成的disk上的程式檔案中並不含有共享庫的**。

程式執行時,共享庫被載入到記憶體中的乙個位置,所有使用共享庫的程式都可以呼叫。

共享庫生成的是位置無關**pic

靜態庫鏈結

所有的編譯系統都提供一種機制,將所有相關的目標模組打包成為乙個單獨的檔案,成為靜態庫它可以用作鏈結器的輸入。當鏈結器構造乙個輸出的可執行檔案時,它只複製靜態庫里被應用程式引用的目標模組。這裡我們要用到三個簡單的c語言程式addvec.c multvec.c和main2.c。int addcnt 0 ...

靜態庫鏈結

在一般的情況下,一種語言的開發環境往往會附帶有語言庫 language library 這些庫就是對作業系統的api的包裝。其實乙個靜態庫可以簡單地看成一組目標檔案的集合,即很多目標檔案經過壓縮打包後形成的乙個檔案。我們知道在乙個c語言的執行庫中,包含了很多跟系統功能相關的 比如輸入輸出 檔案操作 ...

靜態庫和共享庫

建立和使用靜態庫 1 建立目錄 mkdir p test sub 2 在子目錄sub 下編寫hello.c和hello.h hello.c include include hello.h void hello hello.h include void hello 4 在主目錄test 下編寫main...