VS2008(或VS2010)从VS2005升级期间出现LNK2001和LNK2019错误

时间:2012-10-29 16:16:18

标签: c++ visual-studio-2008 linker

我正在尝试将旧的VC6解决方案升级到VS2010。一切都编译好(经过一些代码更改来处理一些VC ++更改),但它拒绝链接。我有6个静态库 - 全部设置为“在共享DLL中使用MFC”和“不使用ATL” - Unicode字符集,以及一个应用程序(.EXE)设置为“使用标准Windows库”和“不使用ATL” “(当然也是Unicode)。此解决方案使用Visual Studio 2005(SP1)编译/链接正常,但VS2008和VS2010上的链接都失败。错误消息主要与“CStringT”相关。从我研究的所有内容来看,我应该在VS2005中看到这些CStringT链接错误(也就是当CString更改为模板类时),但正如我所说,它在VS2005中链接得很好。我已经尝试了每一个提示和这里和其他地方推荐的技巧(即在我的stdafx.h头文件中显式导入CStringT的模板类),但没有运气。有什么新想法吗?我将粘贴下面的错误样本以供参考。谢谢!

error LNK2001: unresolved external symbol "public: class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const & __thiscall SomeExceptionClass::GetErrorMessage(void)const " (?GetErrorMessage@SomeExceptionClass@@QBEABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@XZ)   

error LNK2001: unresolved external symbol "public: class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const & __thiscall SomeExceptionClass::GetErrorMessage(void)const " (?GetErrorMessage@SomeExceptionClass@@QBEABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@XZ)

error LNK2019: unresolved external symbol "public: class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const & __thiscall SomeExceptionClass::GetErrorMessage(void)const " (?GetErrorMessage@SomeExceptionClass@@QBEABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@XZ) referenced in function __catch$?Init@SomeOtherClass@@QAEHPA_W00000@Z$0

error LNK2001: unresolved external symbol "public: class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const & __thiscall SomeExceptionClass::GetErrorMessage(void)const " (?GetErrorMessage@SomeExceptionClass@@QBEABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@XZ)

error LNK2001: unresolved external symbol "public: class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const & __thiscall SomeExceptionClass::GetErrorMessage(void)const " (?GetErrorMessage@SomeExceptionClass@@QBEABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@XZ)

error LNK2001: unresolved external symbol "public: class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const & __thiscall SomeExceptionClass::GetErrorMessage(void)const " (?GetErrorMessage@SomeExceptionClass@@QBEABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@XZ)

error LNK2001: unresolved external symbol "public: void __thiscall SomeDatabaseClass::ExecDirect(class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const &)" (?ExecDirect@SomeDatabaseClass@@QAEXABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z)

error LNK2001: unresolved external symbol "public: void __thiscall SomeDatabaseClass::ExecDirect(class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const &)" (?ExecDirect@SomeDatabaseClass@@QAEXABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z)

1 个答案:

答案 0 :(得分:0)

DUH!那就是总结这个解决方案。出于一些奇怪的原因,VS2008和VS2010在升级旧的VC6项目时处理“附加链接依赖”的工作非常糟糕(虽然VS2005似乎处理得很好)。我所缺少的只是进入VS2010中的链接选项(在加载和升级旧的VC6工作区/项目之后)并将我的五个静态库(lib1.lib,lib2.lib等)添加到“附加依赖项”字段( Linker-&gt;输入),然后将我的输出文件夹[s](创建那些.LIB文件)添加到“Additional Library Directories”字段(Linker-&gt; General) - 所有属于我的实际.EXE的属性当然是项目。繁荣,现在它像一个魅力链接。我对这些CString /模板升级问题(来自MSDN文章等)的“红鲱鱼”非常偏执,我完全错过了显而易见的事情。希望这有助于有人在路上。 :)