在我升级VC6项目后,为什么VC2010会尝试链接MFC42 DLL

时间:2013-06-03 10:16:30

标签: vc6 visual-c++

我将我的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似乎不兼容,所以现在错误是多重定义

3 个答案:

答案 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,即使从未进行任何此类设置。

追踪和删除违规库并不容易。