1

我将我的Win32项目从VC6升级到VC2010,并修复了很多只适用于VC6的代码,编译是可以的,但是当项目开始链接时,它失败并显示以下消息

链接:致命错误 LNK1104:无法打开文件“mfc42ud.lib”

我试图找到提到 MFC42ud 的位置,但我找不到,这让我发疯。

有人可以帮我吗?

更新:

现在我下载了MFC42ud.lib,但是还是有链接错误,现在变成了

atlsd.lib(atltypes.obj) : 错误 LNK2005: "public: __thiscall CRect::CRect(void)" (??0CRect@@QAE@XZ) 已在 mfc42ud.lib(MFC42uD.DLL) 中定义

atlsd.lib(atltypes.obj) : 错误 LNK2005: "public: int __thiscall CRect::Width(void)const" (?Width@CRect@@QBEHXZ) 已在 mfc42ud.lib(MFC42uD.DLL) 中定义

atlsd.lib(atltypes.obj) : 错误 LNK2005: "public: int __thiscall CRect::Height(void)const" (?Height@CRect@@QBEHXZ) 已在 mfc42ud.lib(MFC42uD.DLL) 中定义

链接:致命错误 LNK1104:无法打开文件“mfcs42ud.lib”

如果我只是复制 MFC42ud.lib 似乎不兼容,所以现在错误是多重定义

4

3 回答 3

2

好的,最后我解决了。这是因为有一些库我需要链接,而这些库中有一些链接信息。

原因是微软VC指定的预处理器#pragma comment(lib, "some.lib")

实际上,这确实是一个糟糕的解决方案,尤其是链接系统提供的库,例如 mfc 库。即使您升级了项目,它仍然想链接旧的 mfc 库。

解决方案是忽略旧的 mfc 库。

于 2013-06-04T06:43:32.583 回答
1

它是 Visual Studio 6 的 MFC DLL 的 Unicode 调试版本,是 Visual Studio 6 安装期间可选部件的一部分。

从 VS6 安装 CD 安装它。

参考:http ://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/46a26f16-a407-4628-962b-2a6899391293/

ps 顺便说一句,这是谷歌的第一个结果。

于 2013-06-03T11:10:14.470 回答
0

就我而言,我的项目正在链接另一个库,并且该库是用

#pragma comment(lib, "mfc42.lib") 

在里面。

将该库链接到我的项目中指示我的项目链接到mfc42.lib,即使从未有任何此类设置。

追踪和删除有问题的图书馆并不容易。

于 2013-11-01T22:33:58.790 回答