前面一篇介紹了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...