linux程式設計學習筆記(一)靜態庫與動態庫

2021-08-25 20:30:46 字數 987 閱讀 7199

庫分兩種:

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 動靜之分是因為鏈結階段對庫的處理不一樣導致。程式編譯成可執行檔案的過程 預處理 編譯 彙編 鏈結 可執行檔案。靜態庫 在鏈結...