将VC开发的项目进行发布,在调试的Debug模式下运行没有错误,切换至Release下发布时,出现了错误,提示
fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
查找了一些资料,确定了错误的原因,由于本项目是基于MFC开发的,项目中也引用了其他的DLL项目,结果在Realse下编译了出现了下面的错误,
程序时出现以下问题:d:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(24): fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
下面给出解决方法:
按照提示,作出以下修改:
将上图中所处的位置,即“项目属性页->配置属性->C/C++->代码生成->运行库”的值改为下图中的值,即“多线程调试 DLL (/MDd)”(在Debug模式下设置),如果是Release模式下,将此值设置为“多线程 DLL (/MD)”,如下图所示;
在查阅相关资料后发现:静态链接mfc库的话,那么运行库也得设置成静态链接。 动态链接mfc库,运行库也得设置成动态链接。撤销以前所做修改,做出如下修改:在项目属性位置下进行修改,即:“项目属性页->配置属性->常规->MFC的使用”的值改为下图中的值,即“在共享 DLL 中使用 MFC”
看看vs的项目属性设置,以下两项属性设置必须一致:(一个动态,一个静态)
静态设置为:
运行库:多线程(/MT)
MFC的使用:在静态库中使用MFC
或者两项都设置为:
动态设置为:
运行库:多线程DLL(/MD)
MFC的使用:在共享DLL中使用MFC
操作方式:打开项目属性页
配置属性->常规->MFC的使用
c/c++->代码生成->运行库
至此,问题解决!
同时需要注意,切换至Release模式下发布编译时,有时出现下面的错误,
CString str;
str.Format("今天:%4d年%2d月%2d日", systime.wYear, systime.wMonth, systime.wDay);
Format函数的居然出错类型不匹配的问题,没有与参数列表匹配的 重载函数 "ATL::CStringT<BaseType, StringTraits>::Format [其中 BaseType=wchar_t, StringTraits=StrTraitMFC_DLL<wchar_t, ATL::ChTraitsCRT<wchar_t>>]" 实例
原因为:项目中使用的字符集不一致造成的,
解决办法:字符串用TEXT宏,可以适应Unicode和多字节环境
str.Format(_T("abc%d"), 10);
或者将,
在项目属性位置下进行修改,即:“项目属性页->配置属性->常规->字符集”的值改为“使用多字节字符集”即可解决问题。