应用程序2.4内核移植2.6内核常见错误告警分析

来源:互联网 发布:我的奋斗 希特勒 知乎 编辑:程序博客网 时间:2024/06/07 05:54

   以下是将公司产品有内核2.4移植到2.6内核是常见的错误分析,更多是的GCC编译器升级造成一个错误!特做简单的总结,方便以后查询!!

1、  error: label at end of compound statement

gcc error "label at end of compound statement"

在高版本gcc中,对如如下情况视为错误
switch(x){
    case 1: ....
    default:
}
default后面必须加break或者空语句。

在用高版本gcc编译低版本代码的时候经常出现这个错误。

2、

test.c:22: error: conflicting types for 'urlencode'
test.c:18: error: previous implicit declaration of 'urlencode' was here

原因一:
原来是因为未做声明,或者就是使用函数,放在了定义函数的前面!这种常见!
 
原因二:
头文件的被循环引用,在引用时考虑清楚包含顺序
 
原因三:
头文件声明和定义参数稍有不同
例:
 头文件中声明 void Hanlder(const char * buf);
 在定义时写作 void Hanlder(char * buf);
这是就会发生conflicting types for 错误问题

3 incompatible implicit declaration of built-in function 'exit'

 原因是:缺少函数的头文件