错误产生:
在制作根文件系统时,make busybox的时候出现了:
error: conflicting types for ‘xxx’
error: previous implicit declaration of ‘xxx’ was here
…
Makefile:744: recipe for target ‘xxx’ failed
recipe for target ‘xxx/xxxx.o’ failed
错误图片展示如下:
查询解决方案
在make后出现大量报错是令人头疼的事情,我将错误提示进行搜索,总结主要有以下原因:
-
无函数声明,或者声明顺序不对;如1与2顺序
-
系统头文件被破坏了
-
头文件被循环引用
-
声明的函数与定义的函数参数不同
-
函数使用的参数类型是自定义类型(如结构体),而自定义类型的定义在函数的声明和函数定义之间,由于在函数声明时,结构体并没有被定义,不被系统识别为结构体,而后面定义函数时,结构体已经定义,系统将其识别为结构体,导致系统认为声明和定义使用
-
在linux中,编译头文件,会出现一个中间的预编译文件(.h.gch),当再次编译整个文件时,如果该文件(.h.gch)存在,则会直接使用该文件(.h.gch),而不会再编译.h文件,此时,如果你改动了.h文件,而继续编译,则会造成声明和定义不一致的现象,虽然在文件里显示声明和定义是一致的,但是实际上系统编译时并不会使用你改动后的文件(.h),而是直接使用你修改前编译生成的.h.gch文件;要及时更新.h.gch文件
(以上源自https://blog.csdn.net/weixin_34380781/article/details/92223048) -
在我报错的头文件中未包含#include<resource.h>头文件
-
缺少工具lzo、lzop 可使用:sudo apt-get install lzop下载
错误解决
在尝试了一些解决方案后,仍无法解决报错,我回过头来反复查看教学视频,发现在我的操作过程中只有一个与视频有着较大差异:
**
就是我得Ubuntu版本与arm-Linux-gcc交叉编译工具的版本 于是我想着如果我更新一下我的交叉编译工具版本会不会解决这些报错;
**
答案是显而易见的,报错解决,完美编译:
制作的根文件系统也可以挂载和使用:
总结
问题的产生可能是多种原因的,对于新手小白来说去查询问题,排除问题显得异常艰难;尤其我在排查是不是头文件声明顺序产生的报错时,花费了大量的时间和精力。
最后也是给自己和大家(新手)提个醒,如果在操作步骤相对规范的情况下产生了一些不知名错误,可以率先思考是不是版本不兼容的情况;这里的版本不兼容有很多情况,比如:交叉编译工具与Ubuntu版本的不兼容,交叉编译工具和Ubuntu与开发板内核的不兼容等等。
如果更新后依然无法解决,我们再去修改相关文件,这样也许会节省不少的时间。