我将我的Win32项目从VC6升级到VC2010,并修复了许多只能在VC6上运行的代码,编译没问题,但是当项目开始链接时,它失败并显示以下消息
LINK:致命错误LNK1104:无法打开文件'mfc42ud.lib'
我试图找到MFC42ud被引用的地方,但我不能,它让我发疯。
有人可以帮助我吗?
更新
现在我下载了MFC42ud.lib,但仍然存在链接错误,现在它变为
atlsd.lib(atltypes.obj):错误LNK2005:已在mfc42ud.lib(MFC42uD.DLL)中定义的“public:__thiscall CRect :: CRect(void)”(?? 0CRect @@ QAE @ XZ)
atlsd.lib(atltypes.obj):错误LNK2005:已在mfc42ud.lib(MFC42uD.DLL)中定义的“public:int __thiscall CRect :: Width(void)const”(?Width @ CRect @@ QBEHXZ)< / p>
atlsd.lib(atltypes.obj):错误LNK2005:“public:int __thiscall CRect :: Height(void)const”(?Height @ CRect @@ QBEHXZ)已在mfc42ud.lib中定义(MFC42uD.DLL)< / p>
LINK:致命错误LNK1104:无法打开文件'mfcs42ud.lib'
如果我只是复制MFC42ud.lib似乎不兼容,所以现在错误是多重定义
答案 0 :(得分:2)
好的,最后我解决了。这是因为我需要链接一些库,这些库中有一些链接信息。
原因是Microsoft VC指定了预处理器#pragma comment(lib,“some.lib”)
实际上它确实是一个糟糕的解决方案,尤其是链接系统提供的库,如mfc libs。即使您升级了项目,它仍然希望链接旧的mfc库。
解决方案是忽略旧的mfc库。
答案 1 :(得分:1)
它是Visual Studio 6的MFC DLL的Unicode调试版,是Visual Studio 6安装期间可选部件的一部分。
从VS6安装光盘安装。
参考:http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/46a26f16-a407-4628-962b-2a6899391293/
P.S。顺便说一句,这是谷歌的第一个结果。
答案 2 :(得分:0)
就我而言,我的项目是链接到另一个库,而该库是用
构建的#pragma comment(lib, "mfc42.lib")
在里面。
将该库链接到我的项目中,指示我的项目链接到mfc42.lib
,即使我从未进行任何此类设置。
追踪和删除违规库并不容易。