一種是lib包含了函式所在的dll檔案和檔案中函式位置的資訊(入口),**由執行時載入在程序空間中的dll提供,稱為動態鏈結庫dynamic link library。
一種是lib包含函式**本身,在編譯時直接將**加入程式當中,稱為靜態鏈結庫static link library。
共有兩種鏈結方式:
動態鏈結使用動態鏈結庫,程式執行時載入dll;靜態鏈結使用靜態鏈結庫,程式執行前載入lib
(1)lib是編譯時用到的,dll是執行時用到的。如果要完成源**的編譯,只需要lib;如果要使動態鏈結的程式執行起來,只需要dll。
如果**裡dll和lib同時存在,而且有關聯:
(1)如果有dll檔案,那麼lib一般是一些索引資訊,記錄了dll中函式的入口和位置,dll中是函式的具體內容;如果只有lib檔案,那麼這個lib檔案是靜態編譯出來的,索引和實現都在其中。使用靜態編譯的lib檔案,在執行程式時不需要再掛動態庫,缺點是導致應用程式比較大,而且失去了動態庫的靈活性,發布新版本時要發布新的應用程式才行。
(2)動態鏈結的情況下,有兩個檔案:乙個是lib檔案,乙個是dll檔案。lib包含被dll匯出的函式名稱和位置,dll包含實際的函式和資料,應用程式使用lib檔案鏈結到dll檔案。在應用程式的可執行檔案中,存放的不是被呼叫的函式**,而是dll中相應函式**的位址,從而節省了記憶體資源。dll和lib檔案必須隨應用程式一起發行,否則應用程式會產生錯誤。如果不想用lib檔案或者沒有lib檔案,可以用win32 api函式loadlibrary、getprocaddress裝載。
注意:應用程式如何找到dll檔案?
使用loadlibrary顯式鏈結,那麼在函式的引數中可以指定dll檔案的完整路徑;如果不指定路徑,或者進行隱式鏈結,windows將遵循下面的搜尋順序來定位dll:
(1)包含exe檔案的目錄
(2)工程目錄
(3)windows系統目錄
(4)windows目錄
(5)列在path環境變數中的一系列目錄
一:lib建立和使用
1.生成lib步驟,新建專案-》控制台-》靜態庫
#ifndef _static_lib_h_
#define _static_lib_h_
int add(int, int);
#endif
#include "stdafx.h"
#include "add.h"
int add(int a, int b)
2.把lib拷貝到main檔案中,建立乙個.h檔案
#include
#include "add.h"
using
namespace
std;
#pragma comment(lib, "lib.lib")
int main(int argc, char *argv)
#ifndef _static_lib_h_
#define _static_lib_h_
int add(int, int);
#endif
二:dll隱式(生成lib和dll,並且使用)
總的檔案包括專案一和專案二。
1.生成dll和lib步驟,新建專案-》控制台-》dll建立
專案一dll(生成dll和lib):
extern "c" __declspec(dllexport) int add(int,int);
#include "stdafx.h"
#include "add.h"
int add(int x,int y)
// dllmain.cpp : 定義dll 應用程式的入口點。
#include "stdafx.h"
boolapientry dllmain(hmodule hmodule,
dword ul_reason_for_call,
lpvoid lpreserved
)return true;
}
2.使用dll和lib,將上一步生成的dll和lib分別放入debug(或者release資料夾裡面,取決於你的編譯方式),lib放入和main檔案一起。還需要加入add.h.
專案二testtest2(使用lib和dll):add.h和main.cpp
extern
"c" __declspec(dllexport) int add(int,int);
#include
#include
#include "add.h"
#pragma comment(lib, "dll.lib")
int main()
C 生成和使用dll和lib
dll和lib 動態鏈結庫 dll 是乙個可以被其他應用程式共享的程式模組,其中封裝了一些可以被共享的例程和資源。和可執行檔案 exe 非常類似,區別在於dll中雖然包含了可執行 卻不能單獨執行,而應由windows應用程式直接或間接呼叫。靜態鏈結庫 lib 包含函式 本身,在編譯時直接將 加入程式...
C 載入lib和dll的方法
c 載入lib的方法 方法1 直接新增lib專案的引用 方法2 在屬性 聯結器 輸入 裡新增要使用的lib,在聯結器 常規 附加庫目錄新增lib的目錄 c 載入dll的方法 參考 一 先介紹dll匯出要使用的函式的方法。dll中匯出函式有兩種方法 1 在函式宣告中加上 declspec dllexp...
C 引用Lib和Dll的方法總結
1.什麼是靜態連線庫lib,什麼是動態鏈結庫 dll 靜態鏈結庫與動態鏈結庫都是共享 的方式,都是二進位制格式的 2.靜態鏈結庫lib和動態鏈結庫dll的區別 若採用靜態鏈結庫,lib 中的指令都全部被直接包含在最終生成的 exe 檔案中了。而動態動態鏈結庫則不必被包含在最終 exe 檔案中,exe...