vs生成動態庫及使用動態庫
動態庫(.dll):動態庫又稱動態連結庫英文為DLL,是Dynamic Link Library 的縮寫形式,DLL是一個包含可由多個程式同時使用的程式碼和資料的庫,DLL不是可執行檔案。動態連結提供了一種方法,使程序可以呼叫不屬於其可執行程式碼的函式。函式的可執行程式碼位於一個 DLL 中,該 DLL 包含一個或多個已被編譯、連結並與使用它們的程序分開儲存的函式。DLL 還有助於共享資料和資源。多個應用程式可同時訪問記憶體中單個DLL 副本的內容。DLL 是一個包含可由多個程式同時使用的程式碼和資料的庫。Windows下動態庫為.dll字尾,在Linux在為.so字尾。(引自百度百科)
靜態庫(.lib):靜態庫是指在我們的應用中,有一些公共程式碼是需要反覆使用,就把這些程式碼編譯為“庫”檔案;在連結步驟中,聯結器將從庫檔案取得所需的程式碼,複製到生成的可執行檔案中的這種庫。(引自百度百科)
區別:靜態庫和動態庫是兩種共享程式程式碼的方式,它們的區別是:靜態庫在程式的連結階段被複制到了程式中,和程式執行的時候沒有關係;動態庫在連結階段沒有被複制到程式中,而是程式在執行時由系統動態載入到記憶體中供程式呼叫。使用動態庫的優點是系統只需載入一次動態庫,不同的程式可以得到記憶體中相同的動態庫的副本,因此節省了很多記憶體。
A:動態庫的生成
1.新建win32專案——>DLL
2.新建標頭檔案和原始檔
// DLL_lib.cpp : 定義 DLL 應用程式的匯出函式。
//
#include "stdafx.h"
#include "DLL_test.h"
int sum(int a,int b)
{
return a + b;
}
標頭檔案 DLL_test.h
#ifndef DLL
#define DLL
int sum(int a, int b);
#endif
3.新建source.def
(是為了在不同編譯環境下都可以使用)
內容如下
LIBRAR "DLL_lib"
EXPORTS
sum @1
格式是這樣的
LIBRAR "庫的名字"
EXPORTS
函式名1 @1
函式名2 @2
。
。
。
3.生成解決方案,然後就可以在Debug目錄下找到生成的庫
動態庫的使用
(要用前面生成的庫檔案和建立的標頭檔案)
新建win32專案—>控制檯應用程式—>空專案
1、新增工程的標頭檔案目錄:工程—屬性—配置屬性—c/c++—常規—附加包含目錄:加上標頭檔案存放目錄。
2、新增檔案引用的lib靜態庫路徑:工程—屬性—配置屬性—連結器—常規—附加庫目錄:加上lib檔案存放目錄。
然後新增工程引用的lib檔名:工程—屬性—配置屬性—連結器—輸入—附加依賴項:加上lib檔名。
3、新增工程引用的dll動態庫:把引用的dll放到工程的可執行檔案所在的目錄下。
4.編輯程式碼執行
#include <iostream>
#include "DLL_test.h"
using namespace std;
int main()
{
cout << sum(2, 4);
getchar();
return 0;
}
執行正常