有人可以帮我理解为什么 MSVC 12 2013 报告这些符号未解析吗?
Error 239 error LNK2019: unresolved external symbol "public: static double const Wm3::Math<double>::DEG_TO_RAD" (?DEG_TO_RAD@?$Math@N@Wm3@@2NB) referenced in function "protected: void __cdecl Matt::ExternalNavConverter::CExternalNavConverter::DoProcessExternalNav(void)" (? DoProcessExternalNav@CExternalNavConverter@ExternalNavConverter@Matt@@IEAAXXZ) C:\Users\mrussell\workspace\Matt\build-conan-Release\Libraries\MattClient\ExternalNavConverter.lib(ExternalNavConverter.obj) MattClient
该符号DEG_TO_RAD
是在我的文件中定义的,当我启动 MSVC 时Wml.dll
,我很确定它在我的文件中。%PATH%
DLL的输出dumpbin
为:
dumpbin /exports C:\Users\mrussell\.conan\data\wml\3.x\ntc\stable\package\a4501f33ae09df332b76b4d6f0e5cebffbe83874\bin\Wml3.dll | grep -i DEG_TO_RAD
143 8E 00031A64 ?DEG_TO_RAD@?$Math@M@Wm3@@2MB
144 8F 00031A98 ?DEG_TO_RAD@?$Math@N@Wm3@@2NB
对于 LIB:
dumpbin /exports C:\Users\mrussell\.conan\data\wml\3.x\ntc\stable\package\a4501f33ae09df332b76b4d6f0e5cebffbe83874\lib\Wml3.lib | grep DEG_TO_RAD
?DEG_TO_RAD@?$Math@M@Wm3@@2MB (public: static float const Wm3::Math<float>::DEG_TO_RAD)
?DEG_TO_RAD@?$Math@N@Wm3@@2NB (public: static double const Wm3::Math<double>::DEG_TO_RAD)
我在这里设置了一个显示链接失败的最小示例,不幸的是我不确定我是否可以放置标题或.lib
文件。
我对 . 不太熟悉dumpbin
,我更习惯nm
..c++filt
但对我来说,这表明符号DEG_TO_RAD
是在 DLL 中导出的。
在 Linker 命令行窗口中,我可以看到 bin 路径(DLL 的路径)作为 提供/LIBPATH
,并且还提供了的完整路径.lib
(在“附加依赖项”中提供。)
这可能是因为我可能将共享库和静态库混合在一起吗?或者一个迹象表明,尽管我认为 DLL 在我的路径中,但不知何故它不是?或者 DLL 中的符号实际上并不存在?(等价于非T
符号类型 in nm
)
我正在浏览这个答案中给出的列表,但到目前为止我只是对它为什么不起作用感到困惑。