《C專家變成》之二

來源:互聯網
上載者:User

標籤:style   blog   http   使用   ar   strong   檔案   2014   sp   

第五章

一、對連結的思考

  目標檔案並不能直接執行,它首先需要載入到連結器。連結器確認main函數為初始進入點(程式開始執行的地方),把符號引用綁定到記憶體位址,把所有的目標檔案集中在一起,再加上庫檔案,從而產生可執行檔。

  如果函數庫的一份拷貝是可執行檔的物理組成部分,那麼我們稱之為靜態串連;如果可執行檔只是包含了檔案名稱,讓載入器在運行時能夠尋找程式所需要的函數庫,那麼我們稱之為動態串連。

  

  即使是在靜態連結中,整個libc.a檔案也並沒有被全部裝入到可執行檔中,所裝入的只是所需要的函數。

 

  動態連結程式庫的主要目的就是,把程式與它們使用的特定的函數庫版本中分離開來。取而代之的是,我們約定由系統向程式提供一個介面,該介面保持穩定,不隨時間和作業系統的後續版本發生變化。

 

  動態連結程式庫的優點:

  1. 可執行檔可以非常小;

  2. 可更加有效地利用磁碟空間;

  3. 所有動態連結到某個特定函數庫的可執行檔在運行時共用該函數庫的一個單獨拷貝。作業系統核心保證映射到記憶體中的函數庫可以被所有使用它們的進程共用。

  4. 動態連結使得函數庫的版本升級更為容易。

 

  動態連結程式庫的缺點:

  1. 運行速度稍慢一點;

 

5.3 函數庫連結的5個特殊秘密

1. 動態庫檔案的副檔名為".so",而靜態庫檔案的副檔名為“.a”

2. 例如,你通過-lthread選項,告訴編譯器連結到libthread.so

3. 編譯器期望在確定的目錄找到庫。
  一般預設在/usr/lib

4. 觀察標頭檔,確定所使用的函數庫

5. 與提取動態庫中的符號相比,靜態庫中的符號提取的方法限制更嚴

 

 

《C專家變成》之二

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.