靜態鏈結庫與動態鏈結庫都是共享**的方式,都是二進位制格式的
若採用靜態鏈結庫,lib 中的指令都全部被直接包含在最終生成的 exe 檔案中了。而動態動態鏈結庫則不必被包含在最終 exe 檔案中,exe 檔案執行時可以「動態」地引用和解除安裝這個與 exe 獨立的 dll 檔案。另乙個區別是靜態鏈結庫中不能再包含其他的動態鏈結庫或者靜態庫,而動態鏈結庫中還可以再包含其他的動態或靜態鏈結庫。
我們先生存生成乙個lib檔案:
vs2017-->新建專案-->windows桌面-->靜態庫,專案名為libtest
新建functem.h 和functem.cpp
functem.h:
#pragma once
#include "stdafx.h"
#ifndef _functem_h
#define _functem_h
int functem(int a, int b);
#endif
functem.cpp:
#include "functem.h"
#include "stdafx.h"
int functem(int a, int b)
然後生成專案,debug目錄下會有libtest.lib和libtest.pdb兩個檔案
在呼叫的時候,需要三步:
1.把libtest.lib和functem.h複製出來,拷貝到呼叫程式的目錄下; 如下圖:
2.在呼叫的cpp檔案上方加入 #include "functem.h"
3.在呼叫的cpp檔案上方加入 #pragma comment(lib,"libtest.lib")
如上圖,已經呼叫成功。
新建專案-->動態鏈結庫,專案名為dlltest
新建dlltest.h:
#pragma once
#ifndef __cdll_h__
#define __cdll_h__
extern "c" int _declspec(dllexport) add(int x, int y);
#endif
dlltest.cpp:
#include "stdafx.h"
#include "dlltest.h"
int add(int x, int y)
生成專案,在debug目錄下有:
呼叫過程:
1.把dlltest.dll , dlltest.lib和 dlltest.h複製出來,拷貝到呼叫程式的目錄下; 如下圖:
ps:在這裡,其實dlltest.lib只是用在編譯器鏈結編譯的時候用到,所以在程式生成後,可以不包括lib檔案,只包括dll檔案即可,真正用到的其實是dll檔案。簡單來說,就是這三個檔案都得拷貝,但是.h和.lib是在編譯鏈結時用到,而只有.dll是放在最後生成目錄中所必須的。
2.在呼叫的cpp檔案上方加入 #include "dlltest.h"
3.在呼叫的cpp檔案上方加入 #pragma comment(lib,"dlltest.lib")
呼叫成功!
C 引用Lib和Dll的方法總結
1.什麼是靜態連線庫lib,什麼是動態鏈結庫 dll 靜態鏈結庫與動態鏈結庫都是共享 的方式,都是二進位制格式的 2.靜態鏈結庫lib和動態鏈結庫dll的區別 若採用靜態鏈結庫,lib 中的指令都全部被直接包含在最終生成的 exe 檔案中了。而動態動態鏈結庫則不必被包含在最終 exe 檔案中,exe...
C 載入lib和dll的方法
c 載入lib的方法 方法1 直接新增lib專案的引用 方法2 在屬性 聯結器 輸入 裡新增要使用的lib,在聯結器 常規 附加庫目錄新增lib的目錄 c 載入dll的方法 參考 一 先介紹dll匯出要使用的函式的方法。dll中匯出函式有兩種方法 1 在函式宣告中加上 declspec dllexp...
小筆記 DLL匯出 和 Lib引用
ifdef exp lib define exp lib extern c else ifdef exp fun define exp fun extern c declspec dllexport define exp class declspec dllexport else define ex...