make busybox的时候出现了error: conflicting types for ‘xxx‘

错误产生:

在制作根文件系统时,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. 无函数声明,或者声明顺序不对;如1与2顺序在这里插入图片描述在这里插入图片描述

  2. 系统头文件被破坏了

  3. 头文件被循环引用

  4. 声明的函数与定义的函数参数不同

  5. 函数使用的参数类型是自定义类型(如结构体),而自定义类型的定义在函数的声明和函数定义之间,由于在函数声明时,结构体并没有被定义,不被系统识别为结构体,而后面定义函数时,结构体已经定义,系统将其识别为结构体,导致系统认为声明和定义使用

  6. 在linux中,编译头文件,会出现一个中间的预编译文件(.h.gch),当再次编译整个文件时,如果该文件(.h.gch)存在,则会直接使用该文件(.h.gch),而不会再编译.h文件,此时,如果你改动了.h文件,而继续编译,则会造成声明和定义不一致的现象,虽然在文件里显示声明和定义是一致的,但是实际上系统编译时并不会使用你改动后的文件(.h),而是直接使用你修改前编译生成的.h.gch文件;要及时更新.h.gch文件
    (以上源自https://blog.csdn.net/weixin_34380781/article/details/92223048)

  7. 在我报错的头文件中未包含#include<resource.h>头文件

  8. 缺少工具lzo、lzop 可使用:sudo apt-get install lzop下载

错误解决

在尝试了一些解决方案后,仍无法解决报错,我回过头来反复查看教学视频,发现在我的操作过程中只有一个与视频有着较大差异:
**

就是我得Ubuntu版本与arm-Linux-gcc交叉编译工具的版本 于是我想着如果我更新一下我的交叉编译工具版本会不会解决这些报错;

**
答案是显而易见的,报错解决,完美编译:
在这里插入图片描述
制作的根文件系统也可以挂载和使用:
在这里插入图片描述

总结

问题的产生可能是多种原因的,对于新手小白来说去查询问题,排除问题显得异常艰难;尤其我在排查是不是头文件声明顺序产生的报错时,花费了大量的时间和精力。
最后也是给自己和大家(新手)提个醒,如果在操作步骤相对规范的情况下产生了一些不知名错误,可以率先思考是不是版本不兼容的情况;这里的版本不兼容有很多情况,比如:交叉编译工具与Ubuntu版本的不兼容,交叉编译工具和Ubuntu与开发板内核的不兼容等等。
如果更新后依然无法解决,我们再去修改相关文件,这样也许会节省不少的时间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值