靜態連線庫和動態鏈結庫的區別

2021-05-08 02:46:02 字數 903 閱讀 2524

windows下, 庫可以通過以下兩種方式來發布: static link library和dynamic link library.一般我們稱之為靜態庫和動態庫(dll)。

什麼是靜態連線庫(static link library),什麼是動態鏈結庫(dynamic link library)

首先,靜態鏈結庫與動態鏈結庫都是共享**的方式。

如果採用靜態鏈結庫,則無論你願不願意,lib 中的定義都全部包含在最終生成的 exe 中。

但是若使用動態庫(dll),該動態庫可以不需要被包含在最終exe檔案。動態庫可在應用程式初始化時或執行時被載入到應用程式的位址空間裡。另外,動態庫可以被多個應用程式共享。windows上的許多重要的庫都是dll。他們被許多應用程式所共享。        

靜態鏈結庫和動態庫(dll)的另外乙個區別在於靜態鏈結庫中不能再包含其他的動態鏈結庫或者靜態庫,而在動態鏈結庫中還可以再包含其他的動態或靜態鏈結庫。

靜態鏈結庫編譯後的檔案格式是*.lib.

所以使用者只需要庫的開發者提供庫的.h標頭檔案和.lib檔案。

而開發靜態庫時, 你只需要在標頭檔案宣告函式或者類,然後再實現檔案裡實現函式或類就可以了。

使用的時候,.h標頭檔案加到工程裡,然後再指定要鏈結的.lib檔案,就可以了。

可用#pragma comment(lib, "libfilepath")來指定要鏈結的靜態庫。或者在project->dependency裡設定。

動態鏈結庫的使用需要庫的開發者提供生成的.lib檔案和.dll檔案(隱式使用dll,編譯期鏈結)。或者只提供dll檔案(採用loadlibrary顯式使用dll,此時為執行期裝載)。

而dll的開發和使用,則需要匯出和匯入的宣告了。關於動態鏈結庫,建議你最好看一下windows via c++(中文譯名windows 核心程式設計)。那本書裡講的很清楚很透徹。

靜態鏈結庫和動態鏈結庫的區別

靜態鏈結庫和動態鏈結庫的區別 一 靜態鏈結庫 預編譯 編譯 彙編 鏈結 linux 生成目標檔案 g c source.cpp o source.o 打包成靜態鏈結庫 ar crv source.a source.o 使用靜態鏈結庫 g test.cpp l靜態鏈結庫目錄 l靜態鏈結庫名稱沒有字尾 ...

C 靜態鏈結庫和動態鏈結庫的區別

假設你有下面的這樣乙個叫name.c的c原始檔 include include void print name const char name 當你編譯時,使用cc name.c生成name.o.這個.o包含了name.c中定義的所有函式和變數的編譯後的 和資料,以及關聯名稱與實際 的索引。如果你看...

靜態鏈結庫和動態鏈結庫

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