靜態庫鏈結

2022-06-07 04:45:08 字數 475 閱讀 5685

在一般的情況下,一種語言的開發環境往往會附帶有語言庫(language library),這些庫就是對作業系統的api的包裝。

其實乙個靜態庫可以簡單地看成一組目標檔案的集合,即很多目標檔案經過壓縮打包後形成的乙個檔案。

我們知道在乙個c語言的執行庫中,包含了很多跟系統功能相關的**,比如輸入輸出、檔案操作、時間日期、記憶體管理等。glibc本身是用c語言開發的,它由成百上千個c語言源**檔案組成,也就是說,編譯完成以後有相同數量的目標檔案,把這些零散的目標檔案直接提供給庫的使用者,很大程度上回造成檔案傳輸、管理和組織方面的不便,於是通常人們使用「ar」壓縮程式將這些目標檔案壓縮到一起,並且對其進行編號和索引,以便於查詢和檢索,就形成了libc.a這個靜態庫檔案。

ld鏈結器會處理這一切繁瑣的事務,自動尋找所有需要的符號及它們所在的目標檔案,將這些目標檔案從libc.a中解壓出來,最終將它們鏈結在一起成為乙個可執行檔案。

ps.靜態執行庫裡面乙個目標檔案只包含乙個函式。

靜態庫鏈結

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

靜態庫,靜態鏈結,動態鏈結 的區別

遺憾地說 除了ender說的 靜態庫在程式執行時就會裝入記憶體,而動態庫在呼叫的時候才裝入!是正確的外,其他觀點都有偏頗之處甚至是錯誤的。我的感覺是,大家受mfc的影響太深了,而沒有看到事情的本質。首先糾正所謂 靜態連線就是把需要的庫函式放進你的exe之中 的說法。在真實世界中,有三個概念 use ...

鏈結 靜態庫 共享庫

編譯器生成可重定位目標檔案 o 鏈結器,將不同的可重定位檔案,進行符號解析,重定位等操作。鏈結到一起。生成最終的可執行檔案。編譯器生成的目標檔案,從位址0開始。重定位操作,將不同的模組中的位址,與最終記憶體位址對應。將庫檔案拷貝,嵌入可執行檔案中。鏈結發生在編譯期間,程式執行之前。生成的最終程式中,...