靜態庫
描述:
如果有多個應用程序使用該庫,那麼每個程序都有一份該庫的拷貝
創建:
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查看程序需要的共享庫