使用#define NDEBUG给我C ++错误

问题描述

|| 如果在main.cpp的顶部定义NDEBUG,则会得到所有以下错误
1>  All outputs are up-to-date.
1>libcmt.lib(invarg.obj) : error LNK2005: __initp_misc_invarg already defined in LIBCMTD.lib(invarg.obj)
1>libcmt.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in LIBCMTD.lib(invarg.obj)
1>libcmt.lib(invarg.obj) : error LNK2005: __set_invalid_parameter_handler already defined in LIBCMTD.lib(invarg.obj)
1>libcmt.lib(invarg.obj) : error LNK2005: __get_invalid_parameter_handler already defined in LIBCMTD.lib(invarg.obj)
1>libcmt.lib(invarg.obj) : error LNK2005: \"void __cdecl _invoke_watson(unsigned short const *,unsigned short const *,unsigned int,unsigned int)\" (?_invoke_watson@@YAXPBG00II@Z) already defined in LIBCMTD.lib(invarg.obj)
1>libcmt.lib(invarg.obj) : error LNK2005: __invalid_parameter already defined in LIBCMTD.lib(invarg.obj)
1>libcmt.lib(invarg.obj) : error LNK2005: \"void __cdecl _invalid_parameter(unsigned short const *,unsigned int)\" (?_invalid_parameter@@YAXPBG00II@Z) already defined in LIBCMTD.lib(invarg.obj)
1>libcmt.lib(invarg.obj) : error LNK2005: ___pInvalidArgHandler already defined in LIBCMTD.lib(invarg.obj)
1>libcpmtd.lib(xdebug.obj) : warning LNK4098: defaultlib \'libcmt.lib\' conflicts with use of other libs; use /NODEFAULTLIB:library
我正在使用MS Visual Studio 2010,boost和gosu库。     

解决方法

        这很可能是由于所包含的标头(如果定义为“ 1”时将是发行版)和链接库(看起来是调试版本)之间不匹配而导致的。某些标头可能依赖于自动链接功能,因此您可以链接到不同版本的库。     ,        这是因为MSVC在Release版本中已经为您定义了“ 1”。您不应该自己
#define _DEBUG
#define NDEBUG
,而应使用预先提供的
#define
。