我有一个用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
。
如何让我的库'导出'那些全局变量,所以我可以在其他模块中使用它们?
答案 0 :(得分:7)
不要在全局声明中使用static关键字。 Here is an article explain the visibility of variables with/without static。静态赋予全局变量内部链接,即只在声明它们的翻译单元中可见。
答案 1 :(得分:2)
它们是否也在.cpp文件中定义?粗略地说,它应该看起来像:
struct Format
{
[...]
static Format gFmt128;
};
// Format.cpp
Format Format::gFmt128 = { 0, 128, 0 }
答案 2 :(得分:2)
您需要将格式对象声明为 extern 而非静态
答案 3 :(得分:1)
我得到未解决的外部的唯一方法是
我很困惑......为什么我们会看到不同的东西?你能解释一下会发生什么吗?