【发布时间】:2021-05-12 14:35:46
【问题描述】:
我一直在努力理解这个问题,希望有人能给我一些提示。我有一个使用漂亮的计数器成语定义的全局变量。
在头文件中定义如下:
BOOST_SYMBOL_EXPORT extern MyClass& GVar;
在源文件中我有以下内容:
MyClass& GVar = reinterpret_cast<MyClass&>(Buffer);
在 Debian 和 Ubuntu 上使用 GCC,一切都被正确编译和链接。但是,在 Windows 上,尝试将 DLL 链接到我的测试可执行文件时出现以下错误:
error LNK2001: unresolved external symbol "class MyClass& GVar" (GVAR_MANGLED_NAME)
我还检查了该符号是否存在于 DLL 中,并且它似乎存在于导出的符号中。我真的不知道还能尝试什么。
有人遇到过这样的问题吗?
【问题讨论】:
-
你能
reinterpret_cast参考吗? -
是的,这不是问题。例如在这里查看漂亮计数器的标准实现en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Nifty_Counter
-
看起来有点过分,但确实如此。
-
PS 我认为问题是在使用标头定位外部 DLL 的符号时,我必须在 dllexport 和 dllimport 之间切换。太烦人了……明天我会再做一些测试,但我认为这可能会解决它
-
@Triskeldeian Windows 机器上的哪个编译器? MSVC 还是 GCC? DLL 运行时链接和存根的链接器路径设置也可能是相关信息。
标签: c++ windows linker-errors dllimport