方法一:
最终是单线程/多线程的问题,描述如下
运行时库现在包含可防止混合不同类型的指令。如果试图在同一个程序中使用不同类型的运行时库或使用调试和非调试版本的运行时库,则将收到此警告。例如,如果编译一个文件以使用一种运行时库,而编译另一个文件以使用另一种运行时库(例如单线程运行时库对多线程运行时库),并试图链接它们,则将得到此警告。应将所有源文件编译为使用同一个运行时库。有关更多信息,请参见使用运行时库(/MD、/MT 和 /LD)编译器选项。
 
  解决方案:(不是很多时候不成功一个好办法!!!)
项目属性,在“配置属性-->C/C++-->代码生成-->运行时库”中将“多线程(/MT)”修改为“多线程调试(/MTd)”。
或者Project-->Properties-->Configuration Properties--> C/C++--> Code Generation -->Runtime Library -->Multi-threaded (/MT)  改为 Multi-threaded Debug (/MTd)

部分参考:http://www.cnblogs.com/lgydqy/archive/2012/02/16/2353925.html

方法二:

在同一个项目中,所有的源文件必须链接相同的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模式下 
C/C++ code
?
1
#define _ASSERT(expr) ((void)0)
所以使用 _ASSERT 包含crtdbg.h 后就不会报编译连接错误
加上这个才能编译过。。。