靜態庫和動態庫

 


靜態庫

描述: 如果有多個應用程序使用該庫,那麼每個程序都有一份該庫的拷貝
創建:
    ar crv 庫的名稱 用來生成的文件
    庫的名稱:必須以lib開頭,後綴名爲.a
例子:   
        注:這句話已經創建了一個庫文件,但是創建完了不代表就可以使用了,還需要爲函數庫生成一個內容表,
        方可使用。不過如果使用了GNU的軟件開發工具,這一步是不需要的。
      
使用:
     或者
    
     -L選擇當前目錄(.)。-lfoo使用libfoo.a(如果有libfoo.so共享庫的話,會優先選擇)
對比:
        項目                UNIX        WINDOWS
        目標模塊            .o            .OBJ
        靜態函數庫        .a            .LIB
        動態庫            .so            .DLL
        程序                任意            .EXE

共享庫(動態庫)

描述: 如果有多個應用程序使用該庫,那麼所有程序共享一份文件,即只有一份拷貝。
創建
      注:-shared 選項指定生成動態連接庫(讓連接器生成T類型的導出符號表,有時候也生成弱連接W類型的導出符號),不用該標誌外部程序無法連接。相當於一個可執行文件;
      -fPIC 表示編譯爲位置獨立的代碼,不用此選項的話編譯後的代碼是位置相關的,所以動態載入時是通過代碼拷貝的方式來滿足不同進程的需要 ,而不能達到真正代碼段共享的目的;
查看 :通過ldd查看程序需要的共享庫
       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章