[英]Export variable from C++ static library
我有一個用C ++編寫的靜態庫,我有一個描述數據格式的結構,即
struct Format{
long fmtId;
long dataChunkSize;
long headerSize;
Format(long, long, long);
bool operator==(Format const & other) const;
};
一些數據格式被廣泛使用,如{fmtId=0, dataChunkSize=128, headerSize=0}
和{fmtId=0, dataChunkSize=256, headerSize=0}
一些數據結構類在構造函數中接收格式。 我想為那些廣泛使用的格式提供某種快捷方式,比如我可以通過引用傳遞的幾個全局Format
成員gFmt128, gFmt256
。 我在.cpp文件中實例化它們
Format gFmt128(0, 128, 0);
而且.h有
extern Format gFmt128;
另外,我聲明Format const & Format::Fmt128(){return gFmt128;}
並嘗試在主模塊中使用它。
但是如果我嘗試在使用lib的主模塊中執行此操作,則鏈接器會抱怨未解析的外部gFmt128
。
如何讓我的庫'導出'那些全局變量,所以我可以從其他模塊中使用它們?
不要在全局聲明中使用static關鍵字。 這篇文章解釋了帶/不帶靜態變量的可見性 。 靜態賦予全局變量內部鏈接,即只在聲明它們的翻譯單元中可見。
它們是否也在.cpp文件中定義? 粗略地說,它應該看起來像:
struct Format
{
[...]
static Format gFmt128;
};
// Format.cpp
Format Format::gFmt128 = { 0, 128, 0 }
您需要將Format對象聲明為extern而不是static
Morhveus,我也試過這個。 我的鏈接器說它已經定義了gFmt128符號。 這確實是我期望的行為:編譯器將函數體添加到庫和客戶端對象,因為它在包含文件中定義。
我得到未解決的外部的唯一方法是
我很困惑......為什么我們會看到不同的東西? 你能解釋一下會發生什么嗎
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.