我将我的Win32项目从VC6升级到VC2010,并修复了许多只在VC6上工作的代码,编译是可以的,但是当该项目开始链接时,它失败了。
链接:致命错误LNK1104:无法打开文件'mfc42ud.lib‘
我试图找出MFC42ud在哪里被引用,但我做不到,它把我逼疯了。
有人能帮我吗?
更新:
现在我下载了MFC42ud.lib,但是仍然存在链接错误,现在它变成了
atlsd.lib(atltypes.obj):error LNK2005:"public:__thiscall CRect::CRect(void)“(??0 CRect@@QAE@XZ)已在mfc42ud.lib(MFC42uD.DLL)中定义。 atlsd.lib(atltypes.obj):error LNK2005:"public: int __thiscall CRect::Width(void)const“(?Width@CRect@@QBEHXZ)已在mfc42ud.lib(MFC42uD.DLL)中定义 atlsd.lib(atltypes.obj):error LNK2005:"public: int __thiscall CRect::Height(void)const“(?Height@CRect@@QBEHXZ)已在mfc42ud.lib(MFC42uD.DLL)中定义 链接:致命错误LNK1104:无法打开文件'mfcs42ud.lib‘
如果我只是复制MFC42ud.lib,它似乎是不兼容的,所以现在错误是多个定义。
发布于 2013-06-04 06:43:32
好的,我终于解决了。这是因为有一些lib我需要链接,并且在这些库中有一些链接信息。
原因是Microsoft指定的预处理器#实用化注释(lib,"some.lib")
实际上,它确实是一个糟糕的解决方案,特别是链接系统提供的库,比如mfc库。即使您升级了该项目,它仍然希望链接旧的mfc库。
解决方案是忽略旧的mfc库。
发布于 2013-06-03 11:10:14
它是Visual 6的MFC的Unicode调试版本,这是Visual 6安装过程中可选部件的一部分。
从VS6安装CD中安装它。
参考资料:http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/46a26f16-a407-4628-962b-2a6899391293/
附注:顺便说一句,这是谷歌的第一个结果。
发布于 2013-11-01 22:33:58
在我的例子中,我的项目是针对另一个库进行链接的,而这个库是用
#pragma comment(lib, "mfc42.lib")
在里面。
将这个库链接到我的项目中会指示我的项目链接到mfc42.lib
,尽管我从来没有过这样的设置。
追踪和移除违规的库并不容易。
https://stackoverflow.com/questions/16894488
复制相似问题