uboot编译错误error:no rule to make target include/stddef.h,needed by 'img2srec.o'

本文介绍了在使用make命令编译过程中遇到的错误及其解决方法。主要问题是由于未清除旧的编译文件导致make找不到所需的头文件。文中给出了两种解决方案:一是使用makedistclean命令彻底清理之前的编译产物;二是采用makeclean再加makeclobber的方式。

原文地址:http://blog.youkuaiyun.com/xishuang_gongzi/article/details/50426158

make[1]: *** no rule to make target '/usr/lib/gcc/i486-linux-gun/4.3.2//include/stddef.h',needed by 'img2srec.o',stop,
make[1]:leaving directory '/usr/local/arm/u-boot-1.3.2/tools'
make: *** [tools] error 2

这个问题出在没有进行make distclean上面,进行make之前一定要先make distclean将上次的东西清干净了。

有些没有make distclean,需要make clean然后make clobber。

make   clobber :删除所有配置所编译输出的结果文件
<think>我们正在解决的是在执行 `make menuconfig` 时出现的错误:`Makefile:10: /feeds.mk: No such file or directory`。这个错误表明在 Makefile 的第10行尝试包含一个名为 `feeds.mk` 的文件,但该文件不存在。 根据引用[1]中提到的信息,我们需要先执行 `./scripts/feeds update -a` 来更新所有的软件包定义。这是因为在 OpenWrt 构建系统中,`feeds` 是软件包的来源,而 `feeds.mk` 文件通常是在更新 feeds 后生成的。 因此,解决步骤应该是: 1. 确保当前在 OpenWrt 源码目录的根目录下。 2. 运行 `./scripts/feeds update -a` 来更新所有 feeds。 3. 运行 `./scripts/feeds install -a` 来安装所有 feeds 的软件包(可选,但通常需要)。 4. 然后再次尝试运行 `make menuconfig`。 如果上述步骤不能解决问题,那么可能是 feeds 配置有问题,或者源码目录不完整。 另外,根据引用[2],我们可能需要安装一些必要的工具,比如 `make`。但根据错误信息,这里的问题更可能是缺少 feeds 更新。 引用[3]中提到了一个错误,但与我们当前的问题关系不大,我们可以暂时忽略。 因此,具体步骤如下: ### 解决步骤 1. **更新 feeds** 在 OpenWrt 源码根目录下执行: ```bash ./scripts/feeds update -a ``` 这个命令会从 feeds.conf 或 feeds.conf.default 中定义的源更新软件包信息[^1]。 2. **安装 feeds**(可选,但推荐) 更新后,安装所有可用的软件包: ```bash ./scripts/feeds install -a ``` 3. **再次运行 `make menuconfig`** 完成上述步骤后,再次尝试: ```bash make menuconfig ``` 4. **如果问题依旧** - 检查 `feeds.conf` 或 `feeds.conf.default` 文件是否存在,并确认其内容是否正确。 - 确保当前目录是 OpenWrt 源码的根目录,并且已经正确解压了源码(参考引用[2]中关于解压uboot的提示,但这里我们处理的是OpenWrt源码,不是uboot)。 ### 注意事项 - 如果之前没有执行过 `git clone` 获取完整的 OpenWrt 源码,那么需要先获取源码。这个错误也可能发生在源码不完整的情况下。 - 确保系统中已安装必要的构建工具,如 `make`、`gcc` 等(参考引用[2]中安装make的过程)。 ### 示例:检查 feeds.conf 文件 在 OpenWrt 源码根目录下,检查是否存在 `feeds.conf` 或 `feeds.conf.default` 文件。如果没有,可以从官方示例中复制一个: ```bash # 如果 feeds.conf 不存在,尝试复制默认文件 if [ ! -f feeds.conf ]; then cp feeds.conf.default feeds.conf fi ``` 然后再次执行更新。 ### 相关问题 1. 如何添加自定义 feed 到 feeds.conf 文件? 2. 更新 feeds 时出现网络错误如何解决? 3. 如何为 OpenWrt 编译自定义软件包?</think>### 解决 `make menuconfig` 错误:`Makefile:10: /feeds.mk: No such file or directory` #### 错误原因分析 此错误表明 OpenWrt 构建系统缺少关键的 `feeds.mk` 文件,该文件由 feeds 管理工具生成。主要原因是: 1. **未初始化 feeds 系统**(引用[1]相关) OpenWrt 通过 `feeds` 机制管理软件包源,必须执行 `./scripts/feeds update -a` 生成 `feeds.mk` 2. **源码目录不完整** 可能遗漏了 OpenWrt 核心文件(如 `feeds.conf.default`) 3. **环境配置错误** 在错误目录执行命令或未安装编译依赖(引用[2]相关) --- ### 完整解决步骤 #### 步骤 1:验证目录结构 在 **OpenWrt 源码根目录** 检查必要文件: ```bash ls -la feeds.conf.default scripts/feeds ``` 应有输出: ``` feeds.conf.default scripts/feeds # 可执行脚本 ``` #### 步骤 2:初始化 feeds 系统(关键) ```bash # 更新所有软件包源定义(引用[1]) ./scripts/feeds update -a # 安装所有软件包索引 ./scripts/feeds install -a ``` 成功执行后会自动生成 `feeds.mk` 及相关配置文件。 #### 步骤 3:安装编译依赖 ```bash # 安装基础编译工具(引用[2]) sudo apt-get update sudo apt-get install build-essential libncurses5-dev git # 安装awk高级版本(解决引用[3]类错误) sudo apt-get install gawk ``` #### 步骤 4:重新配置 ```bash make menuconfig ``` 此时应正常进入配置界面。 --- ### 故障排查表 | 现象 | 解决方案 | |------|----------| | `./scripts/feeds: not found` | 1. 确认在OpenWrt源码根目录<br>2. 检查`scripts/feeds`文件是否存在 | | `feeds.conf.default not found` | 从官方仓库恢复:<br>`wget https://raw.githubusercontent.com/openwrt/openwrt/master/feeds.conf.default` | | 更新时出现网络错误 | 修改`feeds.conf.default`替换为国内镜像源,如:<br>`src-git packages https://git.openwrt.org/feed/packages.git` → `src-git packages https://github.com/openwrt/packages.git` | | 仍提示`feeds.mk missing` | 手动生成:<br>`touch include/feeds.mk`<br>`make package/symlinks` | --- ### 关键注意事项 1. **目录一致性** 所有命令必须在OpenWrt源码根目录执行(含`Makefile`的目录) 2. **依赖完整性** 若出现类似引用[3]的`Prerequisite check failed`错误: ```bash # 强制覆盖检查 make FORCE=1 menuconfig ``` 3. **源码验证** 首次使用源码时建议: ```bash git clone https://github.com/openwrt/openwrt.git cd openwrt git checkout v22.03.5 # 指定稳定版本 ``` > **提示**:完成配置后,建议执行 `make download` 预下载所有源码,避免后续编译中断。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值