1

我更新从VS2008到VS2010一个项目,我得到这个错误:似乎无法忽视库在Visual Studio 2010

uafxcwd.lib(afxwinappex.obj) : error LNK2005: "public: virtual struct CRuntimeClass * __thiscall CWinAppEx::GetRuntimeClass(void)const " ([email protected]@@[email protected]@XZ) already defined in WinAppEx.obj

我用尽了一切我能想到的。 uafxcwd.lib位于链接器中的“其他依赖项”和“忽略特定默认库”设置中。出于某种原因,它似乎没有忽略uafxcwd.lib库。

任何帮助将不胜感激。

+1

听起来很明显,但你有没有尝试清理你的解决方案,并重新构建它? – Mangist

+0

是的。这通常可以解决这些奇怪的问题,但这次不行。 – litereddonut

+0

你有没有试过这个,检查链接顺序:http://support.microsoft.com/default.aspx?scid=kb;en-us;q148652 – Mangist

回答

1

修正了它。问题是VS2010中的uafxcwd.lib引入了一个新类cwinappex。这与我所做的班级名字一致,导致冲突。

谁会抢劫它?

1

很久以前我有过这个问题,我发现一个项目已经正确设置并编译没有错误。我也做了一些笔记,但我不记得(我在哪里)得到解决方案。

这就是:

您使用的是C运行时库在MFC项目和库以错误的顺序链接。 CRT和MFC库包含新的,删除和DLLMain,其中CRT正在使用弱外部链接。 MFC库中的所有函数都必须在CRT之前进行链接。

为了实现这一点,请执行下列操作:

在项目设置,链接,输入,去忽略库和添加Libcmtd.lib。这将从链接过程中排除Libcmtd.lib。

既然你需要它,它必须包括在内。您可以通过在“附加依赖项”框中添加库来强制执行此操作。但按以下顺序添加库:uafxcw.lib LIBCMT.lib。

正如yu可以看到的,uafxcw.lib是之前 LIBCMT.lib。这应该解决您的问题。

+0

我试过这个,它不起作用。冲突不在这两个库之间,而是在uafxcwd.lib和生成的obj文件之间。 – litereddonut