庫分兩種:
1、靜態庫(static library),字尾名.a,目標檔案的集合。
所謂靜態的意思是:應用需要將庫拷貝。
所謂拷貝是這樣的過程:在link時,聯結器根據程式所需的函式,將之拷貝到執行檔案,所以可執行檔案的大小會比使用動態庫大,且一旦完成連線,靜態庫即可刪除。
生成和使用靜態庫的方法:
g++ -c ***.cpp 生成 ***.o
(動態庫和靜態庫都是由.o檔案組成)
打包生成.a
ar crv lib***.a ***.o
(靜態庫命名規範,lib開頭,.a結束。編譯器會在-l選項指定目錄和系統設定路徑下,搜尋-l引數前加上字首lib,然後追加副檔名.a得到的靜態庫檔名來查詢靜態庫檔案)
使用g++ test.cpp -static -l. -l***
2、動態庫(shared library),字尾名.so,elf格式的檔案
共享庫:在連線時會在執行程式中留下標記,指明當程式執行時,要載入庫動態。
生成和使用動態庫的方法:
g++ -shared -fpci -o lib***.so ***.o
使用連線時可以用-l指定,但是執行時,必須執行下面三步中的乙個:
1、把庫拷貝到/usr/lib和/lib目錄下。該目錄是搜尋靜態庫和動態庫的預設目錄。
2、修改
ld_library_path環境變數,將動態庫所在路徑加入。 3、
修改/etc/ld.so.conf檔案,把庫所在的路徑加到檔案末尾,並執行ldconfig重新整理。
另外:在搜尋-l指定的庫時,動態庫優先順序高,如果要指明連線靜態庫,需要加如下引數告訴聯結器(-wl 表示後面的引數直接傳給聯結器ld進行處理 )
-wi,-bstatic
同理,限定載入動態庫,採用如下引數
-wi,-bdynamic
nm命令可以檢視庫中涉及的所有符號
u表示使用但未定義的(涉及到別的庫)
t表示庫中定義的方法
Linux下靜態庫學習筆記
linux下靜態庫學習筆記 1.什麼是庫 1 1.庫是一種軟體元件技術,庫裡面封裝了資料和函式。庫的使用可以使程式模組化。linux通常把庫檔案存放在 lib或 usr lib目錄下。使用者建立的可以放在 usr local lib目錄下。win32平台下,靜態庫通常字尾為.lib,動態庫為.dll...
linux程式設計學習5 編寫靜態庫
用乙個例子來闡述,列印函式print a的實現在print a.cpp檔案中,列印函式print b的實現在print b.cpp中,那麼要想把print a和print b函式編成靜態庫libprint.a,供自己或者其他使用者呼叫,應該按照以下步驟操作生成靜態庫libprint.a 1.將以下 ...
靜態庫 動態庫學習筆記
靜態庫 動態庫學習筆記 庫 是一種可執行 的二進位制形式,可被作業系統載入記憶體執行 是寫好的 現有的 完善的可複製的 庫可分為靜態庫 a或.lib 和動態庫 so或.dll 動靜之分是因為鏈結階段對庫的處理不一樣導致。程式編譯成可執行檔案的過程 預處理 編譯 彙編 鏈結 可執行檔案。靜態庫 在鏈結...