1

我正在尝试将旧的 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)
4

1 回答 1

0

呃!这大概总结了这个解决方案。出于某种奇怪的原因,在升级旧的 VC6 项目时,VS2008 和 VS2010 在处理“附加链接依赖项”方面做得非常糟糕(而 VS2005 似乎处理得很好)。我所缺少的只是进入 VS2010 中的链接选项(在加载和升级我的旧 VC6 工作区/项目之后)并将我的五个静态库(lib1.lib、lib2.lib 等)添加到“附加依赖项”字段(链接器-> 输入),然后将我的输出文件夹 [s](创建这些 .LIB 文件的位置)添加到“附加库目录”字段(链接器-> 常规) - 所有在我的实际 .EXE 项目的属性下课程。繁荣,现在它像魅力一样链接。我对这些 CString/模板升级问题(来自 MSDN 文章等)的“红鲱鱼”非常感兴趣。),我完全错过了明显的。希望这对未来的人有所帮助。:)

于 2012-11-14T16:59:36.997 回答