searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

GCC升级到高版本遇到的编译问题

2024-11-14 09:41:55
5
0

1、背景

从centos7升级到ctyunos时,GCC版本也随着升级,从4.8.5升级到10.3.1。原来编译没报错,升级后编译出现大量错误,笔者把自己遇到的问题贴出来供参考。

2、问题和解决方法

1、默认编译选项变化了

    告警:multiple definition of `__ubd_cache_aligned'; .libs/msgreply.o (symbol from plugin):(.text+0x0): first defined here

    解决方法:

           GCC10版本后编译选项默认:-fno-common,改为-fcommon后原有的代码才不告警。

2、返回值缺省不为0

       告警:warning: "return with no value, in function returning non-void”

        原因:函数返回定义为int型,返回时没给值或最后一行没调用return。

       解决方法: 增加return具体值。例如:return 0;

3、头文件缺失

     告警(有几种):

      warning: type of 'sldns_bget_token' does not match original declaration [-Wlto-type-mismatch]

      warning: implicit declaration of function 'assign_sortlist_db_ptr' [-Wimplicit-function-declaration]

     解决方法:找到对应的头文件,加上即可

4、内联函数问题

   错误:queue.h:108:39: warning: 'always inline"function might not be inlinable [-wattributes]

             void  __attribute__ ((always inline)) queue entry free recur(int index, void *ptr);

   解决方法:内联函数必须在头文件(定义和函数体都在头文件)、并加static修饰。参考dpdk里的ring.h

 

3、总结

高版本检查严格,虽然出现很多告警,但多数还是代码写的时候不严格,所以还是要养成好的习惯。有的告警特殊情况下也会造成软件失败,影响业务。

上面问题解决方法若有误差,请告知。

0条评论
0 / 1000
候日出
5文章数
1粉丝数
候日出
5 文章 | 1 粉丝
原创

GCC升级到高版本遇到的编译问题

2024-11-14 09:41:55
5
0

1、背景

从centos7升级到ctyunos时,GCC版本也随着升级,从4.8.5升级到10.3.1。原来编译没报错,升级后编译出现大量错误,笔者把自己遇到的问题贴出来供参考。

2、问题和解决方法

1、默认编译选项变化了

    告警:multiple definition of `__ubd_cache_aligned'; .libs/msgreply.o (symbol from plugin):(.text+0x0): first defined here

    解决方法:

           GCC10版本后编译选项默认:-fno-common,改为-fcommon后原有的代码才不告警。

2、返回值缺省不为0

       告警:warning: "return with no value, in function returning non-void”

        原因:函数返回定义为int型,返回时没给值或最后一行没调用return。

       解决方法: 增加return具体值。例如:return 0;

3、头文件缺失

     告警(有几种):

      warning: type of 'sldns_bget_token' does not match original declaration [-Wlto-type-mismatch]

      warning: implicit declaration of function 'assign_sortlist_db_ptr' [-Wimplicit-function-declaration]

     解决方法:找到对应的头文件,加上即可

4、内联函数问题

   错误:queue.h:108:39: warning: 'always inline"function might not be inlinable [-wattributes]

             void  __attribute__ ((always inline)) queue entry free recur(int index, void *ptr);

   解决方法:内联函数必须在头文件(定义和函数体都在头文件)、并加static修饰。参考dpdk里的ring.h

 

3、总结

高版本检查严格,虽然出现很多告警,但多数还是代码写的时候不严格,所以还是要养成好的习惯。有的告警特殊情况下也会造成软件失败,影响业务。

上面问题解决方法若有误差,请告知。

文章来自个人专栏
服务部署
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0