g++编译时warning: “__USE_GNU“ redefined

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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值