c 中靜態庫和動態庫的建立與鏈結 二

2021-06-07 22:16:33 字數 1165 閱讀 6432

2、動態庫

在使用動態庫的時候,往往提供兩個檔案:乙個引入庫(.lib)和乙個dll(.dll)檔案。雖然引入庫的字尾也是.lib ,但是動態庫的引入庫檔案和靜態庫檔案有著本質的區別,對乙個dll來說,其引入庫檔案(.lib)包含dll匯出的函式和變數的符號名,而.dll檔案包含該dll實際的函式和資料。在使用動態庫的情況下,在編譯鏈結可執行檔案時,只需要鏈結該dll的引入庫檔案,該dll中的函式**和資料並不複製到可執行檔案中。發布產品時,需要同時發布.exe和動態鏈結庫。動態鏈結庫的載入包含:隱式鏈結和顯式載入

2.1隱式鏈結

2.1.1動態庫的建立

a:file->new->projects->win32 dynamic-link library(這裡我建立的是dlltest1)

b:file->new->files(dll.h)

dll.h

#ifdef dll_api

#else

#define dll_api extern "c" _declspec(dllimport)  表示該函式是從動態鏈結庫中引入的

#endif

dll_api int add(int a,int b);

c:file->new->files(dll.cpp)

#define dll_api extern "c" _declspec(dllexport) 表示該函式是動態鏈結庫的匯出函式

#include "dll.h"

int add(int a,int b)

d:編譯,生成dlltest1.lib和dlltest1.dll檔案

上面 extern "c" 表示我們希望動態鏈結庫檔案在編譯時,匯出函式的名稱不要改變。注意雙引號中的c一定大寫。但是extern "c"不能用於匯出乙個類的成員函式,只能用於匯出全域性函式這種情況。

2.1.2動態庫的隱式鏈結

我採用基於對話方塊的mfc應用程式進行測試,具體步驟不一一詳解。只介紹下需要包含的檔案。

將建立的動態庫dll.h  dlltest1.lib  dlltest1.dll三個檔案copy到測試程式資料夾內

a:在cpp檔案中包含標頭檔案#include"dll.h"

b:然後再projects->settings->link->objects/library modules下加入dlltest1.lib 完成

c:執行就ok

c 靜態鏈結庫與動態鏈結庫

兩種庫 共有兩種鏈結方式 使用lib需注意兩個檔案 使用dll需注意三個檔案 生成和使用方法 作業系統 win7 開發軟體 vs2010 1.生成lib檔案 首先,我們先建立乙個控制台工程 新建 工程 控制台程式 新增add.cpp以及add.h檔案。ifndef sub h define sub ...

建立靜態鏈結庫 動態鏈結庫

下面的實操中的動態庫或者靜態庫名都用wujunwu 第一步 建立乙個源 建立靜態鏈結庫的源 include void func1 void int func2 int x,int y 第二步 建立乙個.件作為函式宣告 void func1 void intfunc2 int x,int y 第三步 ...

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

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