動態鏈結庫存在繼承關係時如何匯出

2021-10-04 00:23:56 字數 1440 閱讀 4455

如果使用方需要例項化子類,就必須匯出子類,基類可以不匯出,如:

zoo.h

#ifdef build_dll

#define __owner

#endif

#ifdef __owner

#define import_export __declspec(dllexport)

#else

#define import_export __declspec(dllimport)

#endif

enum e_animal_type

;class

canimal

;class

import_export cdog :

public canimal

;class

ccat

:public canimal

;

main.cpp

canimal *dog =

new cdog;

dog-

>

aniname()

; dog-

>

anitype()

;

如果使用工廠類,需要匯出工廠類,基類和子類可以不用匯出

zoo.h

class

canimal

;class

cdog

:public canimal

;class

ccat

:public canimal

;

factory.h

#ifdef build_dll

#define __owner

#endif

#ifdef __owner

#define import_export __declspec(dllexport)

#else

#define import_export __declspec(dllimport)

#endif

class

import_export cfactroy

;

main.cpp

cfactroy fac;

canimal * dog = fac.

getanimalinstance

(type_dog)

; canimal * cat = fac.

getanimalinstance

(type_dog)

;//canimal *dog = new cdog;

dog-

>

aniname()

; dog-

>

anitype()

;

動態鏈結庫 靜態鏈結庫

包含標頭檔案和庫 idir 指定編譯查詢標頭檔案的目錄,常用於查詢第三方的庫的標頭檔案,例 gcc test.c i.inc o test。ldir 指定鏈結時查詢lib的目錄,常用於查詢第三方庫。llibrary 指定額外鏈結的lib庫 巨集定義 dmacro 以字串 1 預設值 定義 macro...

靜態鏈結庫 動態鏈結庫

庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll windows上對應的是.lib dll ...

靜態鏈結庫,動態鏈結庫

關於靜態鏈結庫,參考如下博文 當你完成了 開發,想把這個 給別人用,但是又不希望別人看到原始碼,就要給別人乙個庫和標頭檔案,庫和標頭檔案是配合的,缺一不可。或者過程相反,你從別人那裡拿到乙個庫和標頭檔案來使用。那麼如何編譯生成乙個庫給他人,如何使用從他人那裡拿到的庫呢?範例1 我們想把linuxfr...