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、总结
高版本检查严格,虽然出现很多告警,但多数还是代码写的时候不严格,所以还是要养成好的习惯。有的告警特殊情况下也会造成软件失败,影响业务。
上面问题解决方法若有误差,请告知。