在同一个项目中,所有的源文件必须链接相同的C运行时库。如果某一文件用了Multithreaded DLL版本,而其他文件用了Single-Threaded或者Multithreaded版本的库,也就是说用了不同的库,就会导致这个警告的出现。
参考:http://blog.csdn.net/redline2005/article/details/6313703
lib之间有冲突。需要删除导入的一些libs。
版 本 | 类 型 | 使用的library | 被忽略的library |
R Release | 单线程 | libc.lib | libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib |
多线程 | libcmt.lib | libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib | |
使用DLL的多线程 | msvcrt.lib | libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib | |
D Debug | 单线程 | libcd.lib | libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib |
多线程 | libcmtd.lib | libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib | |
使用DLL的多线程 | msvcrtd.lib | libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib |
解决方案:工程-->属性-->链接器-->输入-->忽略特定库:将libcmt。
eg:编译Release版本的单线程的工程,在linker的命令行加入如下的参数: /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib
如果还不行,用release版试,或者把debug版本中预编译头的_debug去掉
因为
#ifdef _DEBUG (只有debug版本才会执行这个,release不会执行所以没错,把预编译头去掉_debug肯定能过)
int _CrtDbgReportW(
int reportType,
const wchar_t *filename,
int linenumber,
const wchar_t *moduleName,
const wchar_t *format,
...
)
{
return 0;
}
#endif
///以下参考
#include <crtdbg.h>
库的话 msvcrtd.lib
最好不直接使用 _CrtDbgReport, 用 _ASSERT
在Debug模式下 _ASSERT 被定义为
#define _ASSERT(expr) \
do
{
if
(!(expr) && \
(1 == _CrtDbgReport(_CRT_ASSERT, __FILE__, __LINE__, NULL, NULL))) \
_CrtDbgBreak(); }
while
(0)
|
在非Debug模式下
1
|
#define _ASSERT(expr) ((void)0)
|
加上这个才能编译过。。。