Linux庫函數


鏈接方式分為兩種:靜態鏈接、動態鏈接。

靜態鏈接

  由鏈接器在鏈接時將庫的內容加入到可執行程序中。

  優點

    • 對運行環境的依賴性較小,具有較好的兼容性。

    • 程序在運行的時候不需要庫的支持。

  缺點:

    • 生成的程序比較大,需要更多的系統資源,在裝入內存時會消耗更多的時間。

    • 庫函數有了更新,必須重新編譯應用程序。

動態鏈接

  鏈接器在鏈接時僅僅建立與所需庫函數之間的鏈接關系,在程序運行時才將所需資源調入可執行程序。

  優點:

    • 在需要的時候才調入對應的資源函數。

    • 簡化程序的升級,有着較小的程序體積。

    • 實現進程之間的資源共享(避免重復拷貝)。   

  缺點:

    • 依賴動態庫,不能獨立運行。

    • 動態庫依賴版本問題嚴重。

    • 程序在運行的時候需要庫的支持。

靜態鏈接庫與動態鏈接庫

  • 靜態鏈接庫在Linux中后綴為.a,以lib開頭。如:libtestlib.a

  • 動態鏈接庫在Linux中后綴為.so,以lib開頭。如:libtestlib.so

  • 動態編譯:gcc hello.c -o hello

  • 靜態編譯:gcc hello.c -static -o hello

  • 使用gcc 源文件名 -o 目標文件名時,系統默認采用動態鏈接的方式進行編譯程序,若想采用靜態編譯,加入-static參數。

  • 當靜態庫與動態庫重名時,系統會優先連接動態庫,或者可以加入-static指定使用靜態庫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM