从 Visual Studio 2008 转换为 2010 后出现链接器错误

Linker error after converting from Visual Studio 2008 to 2010

提问人:SathOkh 提问时间:10/26/2013 更新时间:10/26/2013 访问量:153

问:

我有一个由两部分组成的项目:

  • 静态库(lib) + 带有 utils 的头文件
  • 主应用程序(可执行文件、MFC、OpenGL)

我在主项目文件中包含头文件,并将库路径和依赖项添加到链接器中,在 Visual Studio 2008 上一切正常,但是,当我将解决方案移植到 Visual Studio 2010 时,我收到以下错误:

 error LNK2019: unresolved external symbol "public: void __thiscall XmlTools::XmlProperty::LoadXMLFile(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >)" (?LoadXMLFile@XmlProperty@XmlTools@@QAEXV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z) referenced in function "public: bool __thiscall CToolsPanel::ReadWorld(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >,class CSymulatorDoc *)" (?ReadWorld@CToolsPanel@@QAE_NV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@PAVCSymulatorDoc@@@Z)

对库的引用和正确的路径仍然存在。我试图在这里或谷歌中找到解决方案,但我找不到类似的情况。这两个 Visual Studio 版本之间的哪些更改可能会破坏某些内容?或者我做错了什么,而较新版本的 VS 只是对此有更多的限制?

visual-studio-2008 静态库 移植 未解析的外部

评论

0赞 Hans Passant 10/26/2013
在 .lib 文件上使用 dumpbin.exe /exports 查看 LoadXMLFile() 函数的实际外观。您可以使用 undname.exe 来消除您在此处找到的名称。
0赞 SathOkh 10/26/2013
我在结果中看不到 LoadXMLFile:C .CRT$XCU EF .bss 10C .data B41E4 .debug$S 120 .debug$T 14E2 .drectve1406 .rdata 1F0 .rdata$r 58 .rsrc$01 330 .rsrc$02 C .rtc$IMZ C .rtc$TMZ 80 .sxdata 629D .text 745 .text$x B2 .text$yc 3C .text$yd 738 .xdata$x 4 ATL$__a 4 ATL$__z
0赞 SathOkh 10/26/2013
哎呀,不知道如何格式化该工具的结果......也许我误解了某些东西,但我应该以任何特殊方式导出它吗?我虽然我应该只为dll这样做?
0赞 Hans Passant 10/26/2013
接下来使用 /all。重定向到文件,以便您可以在编辑器中打开它进行搜索。
0赞 SathOkh 10/26/2013
它在列表中:但你的答案给了我一些打击 - 在结果中,我可以看到wchar_t,在原始代码中它是字符。现在它链接得很好(我看到不同的,运行时问题,但它是不同的主题:)),非常感谢COMDAT; sym= "public: void __thiscall XmlTools::XmlProperty::LoadXMLFile(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > >)" (?LoadXMLFile@XmlProperty@XmlTools@@QAEXV?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z) 16 byte align Execute Read

答: 暂无答案