使用#define NDEBUG给出了C ++中的错误

时间:2011-05-30 13:06:34

标签: c++ compiler-errors ndebug

如果我在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 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 short const *,unsigned short const *,unsigned int,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 libs。

2 个答案:

答案 0 :(得分:1)

这很可能是由于包含的标题(如果您定义NDEBUG将是发行版本)和链接库(看起来是调试版本)之间的不匹配。也许有些标题依赖于自动链接功能,因此您可以获得链接库的不同版本。

答案 1 :(得分:0)

这是因为MSVC已在Release版本中为您定义NDEBUG。您不应自己#define _DEBUG#define NDEBUG使用预先提供的#define