2. LINK : fatal error LNK1181: 无法打开输入文件“mfc42d.lib”
执行 link.exe 时出错. Calculator.exe - 1 error(s), 0 warning(s) 错误主要出现在网络流传的VC++6.0版本中(ProductID:50021-111-1111111-1745)当调试链接MFC向导程序的时候,出现此错误。发生这一错误的原因主要是设置问题,但仅通过修改设置缺无法解决。并且通过重新安装也无法解决。 正确的解决方法是将安装文件中的 C:/VC++.6.0.with.SP6/VC6CN/VC98/MFC/LIB 或 C:/VC++.6.0.with.SP6/VC6EN/VC98/MFC/LIB 目录下的所有文件复制,粘贴到 C:/Program Files/Microsoft Visual Studio/VC98/MFC/Lib ※和 C:/Program Files/Microsoft Visual Studio/VC98/Lib 即可。 产生此错误的主要原因是VC编译程序在Microsoft Visual Studio/VC98/Lib目录下链接而非Microsoft Visual Studio/VC98/MFC/Lib目录,故即使Microsoft Visual Studio/VC98/MFC/Lib下有mfc42d.lib,也无法链接
如果给你一个vs的解决方案,默认的是release版的,让你弄出一个debug版本出来方便调试,你会发现,一个大的工程,绝对不会是讲release改为debug那么简单。
首先,改为debug后,要保证一些基本的库跟release版本是一致的,这样才能够保证编译时能够找到库文件,dll或者lib,有时候路径设置的不对,甚至连h或者cpp文件也找不到。
然后,是字符集和MFC使用的设置,一般都是多字符集,MFC跟release版本保持一致。当然有时候编译不通过的时候可以都试一下。
另外还有几个特别容易出错的地方,代码生成那里的基本运行时检查和运行时库,设置的不对也会导致大量的出错信息。
注意一下文件的输入输出目录,各个文件之间的调用关系。
下面说一下我今天遇到的错误还有解决方法吧。
error LNK2005: _calloc 已经在 libcmtd.lib(dbgheap.obj) 中定义 LIBCMT.libfatal error LNK1169: 找到一个或多个多重定义的符号这种错误要在链接器—输入—忽略特定库中输入LIBCMT.lib。
error LNK2005: _DllMain@12 已经在 CyberGina.obj 中定义 mfcs80d.libfatal error LNK1169: 找到一个或多个多重定义的符号我在预处理器—预处理定义—删除USEDLL解决了问题
error LNK2019: 无法解析的外部符号 _CIP_STREAM_OP,该符号在函数 “public: long………………中被引用这种错误一般是库文件路径不对链接器—输入—附加依赖库 保持跟release一致
error C2491: XXX: 不允许 dllimport 函数的定义c/c++ 预处理器 预处理定义 添加APICTRL_EXPORTS,网上多半是说加入DLLEXPORT,我试过了,对我来说不能解决。呵呵。
最后,如果提示找不到什么lib,dll一定要仔细检查设置的附加库啊,包含目录啊,依赖项,要保证路径正确,并且文件存在。
./debug/moc_MDIWindow.cpp(54) : error C2491: “MDIWindow::staticMetaObject”: 不允许dllimport 静态数据成员的定义
解决的办法在Project->Property->C/C++->预处理器加上NO_IESAMPLE_EXPORTS,NO_COMMONSAMPLE_EXPORTS(这两个宏都在文件中有定义,而且涉及到#define COMMONSAMPLE_EXPORT __declspec( dllexport ),#define IESAMPLE_EXPORT __declspec( dllexport ))
_Z10qAllocMoreii程序无法定位于QtCore4d.dll