1. 程式人生 > >vs生成動態庫及使用動態庫

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;
}

這裡寫圖片描述
執行正常
這裡寫圖片描述