C 知識點14 靜態鏈結庫和動態鏈結庫區別

2021-08-22 08:28:45 字數 1243 閱讀 8508

庫:函式的集合

作用:共享**

靜態、動態指鏈結

程式編譯過程中,在鏈結階段,程式生成的彙編檔案和庫進行鏈結,生成可執行檔案。

(底層格式,記憶體布局)

(.a .lib)

靜態鏈結庫在程式編譯時被連線到目標**中參與編譯;鏈結時完整地拷貝至可執行檔案中,被多次使用就有多份冗餘拷貝;生成可執行程式之後,靜態鏈結庫不需要(因已將函式拷貝到可執行檔案中)。

靜態庫特點:

1.靜態庫對函式庫的鏈結是放在編譯時期完成的

2.程式在執行時與函式庫再無瓜葛,移植方便

3.浪費空間和資源,因為所有相關的目標檔案與牽涉到的函式庫被鏈結合成乙個可執行檔案

4.如果靜態庫進行更新則應用該庫的所有程式都需要重新編譯(全量更新)。

(.so .dll)

程式執行時由系統動態載入動態庫到記憶體,供程式呼叫,系統只載入一次,多個程式共用,節省記憶體

動態庫特點:

1.動態庫把對一些庫函式的鏈結載入推遲到程式執行時期

2.可以實現程序之間的資源共享。(因此動態庫也稱為共享庫)

3.將一些程式公升級變得簡單

4.甚至可以真正做到鏈結載入完全由程式設計師在程式**中控制(顯示呼叫)

區別:

1.時期:

靜態庫在編譯時連線,在鏈結時拷貝

動態庫在執行時連線

2.資源

靜態庫在每次使用時將全部連線進可執行程式,浪費資源。

動態庫在使用時訪問動態庫中函式,節省資源。

3.更新公升級

靜態庫更新,則每個使用該靜態庫的程式都需要更新,不易於更新公升級

動態庫僅更新自身,易於更新公升級

4.包含其他庫

靜態鏈結庫不能再包含其他動態鏈結庫

動態鏈結庫可以包含其他動態鏈結庫

C 靜態鏈結庫和動態鏈結庫

專案 屬性 c c 附加包含目錄 填寫附加標頭檔案所在目錄 分號間隔多項 專案 屬性 鏈結器 常規 附加庫目錄 填寫附加依賴庫所在目錄 分號間隔多項 專案 屬性 鏈結器 輸入 附加依賴項 填寫附加依賴庫的名字.lib 空格或分號間隔多項 2 dynamic link library 的縮寫形式,dl...

靜態鏈結庫和動態鏈結庫

其實再vc中,我們所用得所有api函式都封裝再下列三個dll檔案中 kernel32.dll 用於管理記憶體,程序和執行緒得各個函式 user32.dll 用於執行使用者介面任務,如視窗的建立和訊息的傳遞的各個函式 gdi32.dll 用於顯示文字和畫圖的各個函式 動態鏈結庫 我們再使用動態庫的時候...

靜態鏈結庫和動態鏈結庫

靜態鏈結庫 win32 static library 呼叫libtest.lib 動態dll win32 dynamic link library 跟librest的生成是一樣的 動態呼叫 成的.lib 和.dll 檔案拷入dllcall 工程所在的路徑,dllcall 執行下列 dll 中匯出函式...