XXX.h:25: warning: "__USE_GNU" redefined
#define __USE_GNU
.....
.....
XXXX/include/features.h:376: note: this is the location of the previous definition
# define __USE_GNU 1
报警原因:
__USE_GNU宏被重复定义。
解决办法:去掉我们定义的__USE_GNU宏(xxx.h文件的25行的#define __USE_GNU代码去掉)
引入新问题:
gcc编译时报警告
warning: implicit declaration of function ‘CPU_ZERO’; did you mean ‘FP_ZERO’? [-Wimplicit-function-declaration]
报警原因:
需要定义__USE_GNU宏。
问题分析
gcc编译器需要定义__USE_GNU宏,g++编译器不需要定义__USE_GNU宏;
__USE_GNU 不是开放给用户用的,features.h里面会修改#undef __USE_GNU;
_GNU_SOURCE 是给用户用的,features.h里面
375 #ifdef _GNU_SOURCE
376 # define __USE_GNU 1
377 #endif
gcc和g++编译器默认定义有区别,g++默认定义了_GNU_SOURCE,gcc没有。
总结:
针对上述问题修改方法有2种:
方法一:
在xxx.h定义__USE_GNU的位置加上ifndef
#ifndef __USE_GNU
#define __USE_GNU
#endif
方法二:
在编译配置里面定义_GNU_SOURCE,如在CMakeList.txt文件里添加:
add_definitions(-D_GNU_SOURCE)