我正在尝试从 DLL 导出全局变量。
Foo.h
class Foo
{
public:
Foo()
{}
};
#ifdef PROJECT_EXPORTS
#define API __declspec(dllexport)
#else
#define API __declspec(dllimport)
#endif
API const Foo foo;
Foo.cpp
#include "Foo.h"
const Foo foo;
当我编译上述代码时,Visual Studio 报错:
foo.cpp(3) : 错误 C2370: 'foo' : 重新定义;不同的存储类别 1> foo.h(14) : 见 'foo' 的声明
如果我使用:
external const Foo foo;
在 Foo.h 中,编译器很高兴,但 DLL 不导出符号。我设法导出有问题的函数,但变量的工作方式似乎不同......有什么想法吗?
最佳答案
在您的标题中:
API extern const Foo foo;
在您的源文件中:
API const Foo foo;
如果您没有 extern
关键字,您的 C 编译器会假定您要声明一个局部变量。 (它并不关心你碰巧包含了头文件中的定义。)当你在源文件中实际声明变量时,你还需要告诉编译器你打算导出它。
关于c++ - 从 DLL 导出全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3097548/