VS下生成與配置靜態庫與動態庫(二)

2021-07-04 21:43:01 字數 2209 閱讀 8777

前面一篇介紹了vs下靜態庫的編譯和使用,這一篇將介紹動態庫的生成和使用方法。

生成動態庫:

1.新建乙個win32控制台專案,去掉預編譯檔案頭,工程命名為「test」;

2.新增用於構建動態庫的**段,放在「test_exports.h」中

#pragma once;

#ifndef test_exports_h_

#define test_exports_h_

#ifdef test_api_exports

#define test_exports __declspec(dllexport)

#else

#define test_exports __declspec(dllimport)

#endif

#endif  //#ifndef tmesh_exports_h_
簡單說明一下上面的巨集定義:

如果定義了巨集 test_api_exports,

則將test_exports定義為

__declspec(dllexport);

否則,將test_exports定義為

__declspec(dllimport)

;__declspec和dllexport、dllimport為c++保留字段,用於區別此時程式是在生成動態庫(dllexport)還是在被其他程式呼叫動態庫(dllimport).

3.配置專案的輸出為動態庫

屬性-》配置屬性-》常規-》配置型別,選擇動態庫,類似靜態庫的設定,可以設定輸出目錄,輸出檔名

4.設定動態庫的.lib檔案檔名(這裡需要自己寫出完整的檔名)

5.新增

test_api_exports的定義:

6.規定需要輸出到動態庫中的變數、函式和類

在需要輸出到動態庫的地方新增標頭檔案「test_exports.h」,具體的:

class test_exports myclass

; // 類

test_exports int myvar; // 變數

test_exports void myfun(){}// 函式

示例:

標頭檔案

#ifndef add_h

#define add_h

#include "test_exports.h"

class test_exports cadd

;#endif

原始檔:

#include "test_add.h"

cadd::cadd()

cadd::~cadd()

int cadd::add(int a, int b)

單獨的原始檔,以及用於函式宣告的標頭檔案:

「func.h」

extern int add_extern(int a,int b);
"func.cpp"

#include "test_exports.h"

test_exports int add_extern(int a,int b)

點生成專案,在你的輸出目錄下將看到兩個檔案:

使用動態庫:

標頭檔案和lib檔案的配置,與靜態庫一致;

在使用動態庫的程式的.exe所在的目錄下,新增.dll檔案

注:輸出到動態庫的物件中,不能包含模板類,如 vectorm_array

Linux下生成動態庫和靜態庫

最近搞linux的程式設計 寫寫這個 綜合網上例子和本人使用方法。編輯得到舉例的程式 hello.h hello.c和main.c hello.h 見程式1 為該函式庫的標頭檔案。hello.c 見程式2 是函式庫的源程式,其中包含公用函式hello,該函式將在螢幕上輸出 hello main.c ...

LInux下生成靜態庫和動態庫

靜態庫與動態庫生成例項 linux下庫 編譯引數分析 靜態庫動態庫 在編譯過程中已經被載入可執行程式,所以體積較大 在可執行程式執行時才載入記憶體,在編譯過程中只是簡單的引用,所以 體積較小 準備好測試工作,寫好測試 test.h test.c main.c ifndef test h define...

靜態庫與動態庫的生成

一.靜態庫 靜態庫 a 程式在編譯鏈結時候把庫的 鏈結到可執行 中,程式執行時將不再需要靜態庫。測試程式 add.h ifndef add h define add h int add int x,int y endif add.c include add.h int add int x,int y...