動態庫和靜態庫

2021-09-24 00:13:01 字數 946 閱讀 2634

靜態庫和動態庫:二進位制級別的**復用

封裝函式或類,供程式呼叫,是二進位制檔案,最多只能被反編譯成彙編**。

動態庫:dynamic link library,動態鏈結庫或共享庫(shared object)只是把要鏈結的動態庫的相關資訊(名字,符號表等)嵌入到可執行檔案中去,在執行時呼叫相應的動態庫。

動態庫可以被多個程式共享,如果依賴它的多個程式同時進行,動態庫也只會載入一次,即在記憶體中只有乙份動態庫**,這些程式共享這份**。相比之下,會大大降低儲存空間的消耗,另外更新公升級也很方便。

linux中動態庫檔案字尾為so,windows系統中為dll

在鏈結時,通過-l引數指定庫檔案搜尋路徑,否則鏈結器只會去系統庫檔案目錄下搜尋,通過-l引數指定具體要鏈結的庫檔案,可以多個,字首lib和字尾名不需要帶。如果存在同名的靜態庫和動態庫,優先鏈結動態庫。當然也可以通過-static引數強制指定鏈結靜態庫。

ldd:檢視可執行檔案依賴的動態庫

預設情況下程式執行時載入器會在系統庫檔案目錄(/lib,/user/lib)下去搜尋庫檔案。

如果找不到則無法正常執行

讓程式正常執行的三種方法:

1.將程式依賴的動態庫拷貝到系統庫檔案目錄下

2.修改ld_library_path環境變數,加入庫檔案搜尋路徑

export ld_library_path = $ld_library_path : .

export ld_library_path = .

3.修改/etc/ld.so.conf配置檔案,加入庫檔案路徑,一行寫乙個

動態庫的兩種呼叫方式:隱式呼叫和顯式呼叫

隱式呼叫:呼叫彷彿感覺不到動態庫的存在,就像呼叫本地定義的函式一樣。但如果缺失動態庫檔案,程式將無法執行。

顯示呼叫:比較麻煩,但可以在執行時根據自己的需要載入某個動態庫,並呼叫其中的某個函式,如果動態庫缺失,我們可以做出相應的處理。

動態庫和靜態庫

本文主要解決以下幾個問題 1 為什麼要使用庫?2 庫的分類 3 建立自己的庫 或許大家對自己初學linux時的情形仍記憶尤新吧。如果沒有乙個能較好的解決依賴關係的包管理器,在linux下安裝軟體將是一件及其痛苦的工作。你裝a包時,可能會提示你要先裝b包,當你費盡心力找到b包時,可能又會提示你要先安裝...

動態庫和靜態庫

先抄一段 windows下的動態庫和靜態庫區別解釋,其實linux下意義一樣的,不過字尾名有些區別 靜態庫 在編譯的時候載入生成目標檔案,在執行時不用載入庫,在執行時對庫沒有依賴性。動態庫 在目標檔案執行時載入,手動載入,且對庫有依賴性。兩者區別 一,靜態庫的使用需要 1 包含乙個對應的標頭檔案告知...

動態庫和靜態庫

簡單的說,使用動態庫就是在鏈結的時候,不會將動態庫的 鏈結到可執行檔案中,而是採用symbol的方式。使用靜態庫,生成可執行檔案的時候,會將靜態庫的 鏈結到可執行檔案中。這樣,動態庫體積會很小,並且可以,依賴於更新的動態庫,但是,缺點是不穩定。靜態庫會更加穩定,但是體積會很大。靜態庫 就是多個目標檔...