2011-05-30 142 views
0

如果我在main.cpp中的顶部定义NDEBUG我得到这一切的错误:语言中使用#define NDEBUG给我在C++中的错误

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)" ([email protected]@[email protected]) 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)" ([email protected]@[email protected]) 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 

我使用微软的Visual Studio 2010中,升压和古薮库。

+0

不要这样做。或者使用链接器的/ NODEFAULTLIB选项。切换到释放配置是一种聪明的方式。 – 2011-05-30 15:26:38

回答

0

这是因为MSVC已经在发布版本中为您定义了NDEBUG。您自己不应使用#define _DEBUG#define NDEBUG,请使用预先提供的#define s。

+0

不,我在Debug版本中定义了NDEBUG。 – Danikaze 2011-05-30 21:10:01

1

这很可能是由于包含的头文件(如果您定义了NDEBUG将会是发行版本)和链接库(它们似乎是调试版本)之间的不匹配造成的。也许某些头文件依赖于自动链接功能,因此您可以链接不同版本的库。