靜態鏈結和動態鏈結

2021-06-09 12:09:25 字數 1359 閱讀 1872

靜態載入dll:

dll工程b:

專案屬性->配置屬性->常規->配置型別:動態庫(.dll);

在宣告檔案中,宣告匯出函式:__declspec(dllexport) ***( int  xx);

如果是c檔案,要在c++檔案中被呼叫,註明extern "c";(可以 #ifdef __cplusplus extern "c" { #endif)

呼叫dll的主工程a:

專案屬性->配置屬性->常規->配置型別:應用程式(.exe);

專案檔案中:#pragma comment(lib, "../xx/debug/xx.lib") (注:此為dll工程中lib檔案位址)

將dll工程中生成的dll和lib檔案拷貝到主工程a的當前資料夾下,以備呼叫。

在要匯入的宣告檔案下註明:__declspec(dllimport) ***( int  xx);

標頭檔案;

靜態載入lib:

1、lib工程b:

專案屬性->配置屬性->常規->配置型別:靜態庫(.lib);

在宣告檔案中,宣告匯出函式:__declspec(dllexport) ***( int  xx);(可以省略)

如果是c檔案,要在c++檔案中被呼叫,註明extern "c";(可以 #ifdef __cplusplus extern "c" { #endif)

呼叫lib的主工程a:

專案屬性->配置屬性->常規->配置型別:應用程式(.exe);

專案檔案中:#pragma comment(lib, "../xx/debug/xx.lib") (注:此為lib工程中lib檔案位址)  

或者,在專案配置中:專案屬性->配置屬性->鏈結器->輸入->附加依賴項:xx.lib; 附加庫目錄:xx(b

工 程中lib檔案所在位置)

在要匯入的宣告檔案下註明:__declspec(dllimport) ***( int  xx);(可以省略)

標頭檔案;

2、在呼叫工程中直接新增lib檔案,新增標頭檔案,進行介面呼叫;

ps:loadlibrary  一般是動態載入dll時(你並不需要對應的標頭檔案?,和lib)

動態載入就是**中loadlibrary,getprocaddress來呼叫函式,只需要h和dll就夠了,而且可以freelibrary,這樣可以動態變化,不會一直占用程序的記憶體空間,方便控制,一般都是使用這個了。

#pragma comment 一般是靜態載入dll時(對應的標頭檔案、dll,和lib缺一不可,並且生產的exe沒有找到dll檔案就會導致「應用程式初始化失敗」)

靜態載入自動link進去了,呼叫的時候,只需要在別的工程中包含對應的h,lib檔案,然後就可以直接呼叫了,實際執行的時候,把對應的dll放到當前路徑等。

靜態鏈結和動態鏈結

1 靜態鏈結庫只包含 lib檔案 動態鏈結庫包含 lib檔案和dll檔案,靜態鏈結庫中不能再包含其他的動態鏈結庫或者靜態庫,而在動態鏈結庫中還可以再包含其他的動態或靜態鏈結庫。此外他們都會用到定義了函式和相關資料結構的.h標頭檔案,其中 h標頭檔案是編譯時必須的,lib是鏈結時需要的,dll是執行時...

靜態鏈結和動態鏈結

動態鏈結庫 靜態庫 import庫區別 windows為應用程式提供了豐富的函式呼叫,這些函式呼叫都包含在動態鏈結庫中。其中有3個最重要的dll,kernel32.dll,它包含用於管理記憶體 程序和執行緒的各個函式 user32.dll,它包含用於執行使用者介面任務 如視窗的建立和訊息的傳送 的各...

靜態鏈結和動態鏈結

靜態鏈結 由於在我們實際的開發中,不可能將他們都放在乙個檔案中執行,所以將他們生成.o檔案進行,從而要將他們進行鏈結,從而實現乙個可以執行的程式,這個過程就是靜態鏈結 靜態庫 是由多個多個.o檔案壓縮打包形成的乙個檔案 靜態鏈結的優點 他在執行的時候都已經將副本都放入了檔案中,所以執行的速度變快 缺...