Openwrt 编译失败原因汇总(持续更新)

发布于 2022年10月 标签: , , 本文被浏览1782次
openwrt-logo

openwrt-logo

最近在折腾 OpenWrt 编译,包括固件编译和单个插件编译,记录下踩过的坑,将持续更新。

固件编译流程

首先架设好编译环境:Linux 平台(推荐 Ubuntu),把软件包更新到最新并且按照固件的源码说明安装好依赖。至于流程说起来比较简单,就是以下几步:

# 第一步
git clone <源码地址>
# 或是在现有仓库(也就是编译所在的根目录)中执行
git pull    # 更新源码仓库

# 第二步
# 在仓库根目录执行
./scripts/feeds update -a    # 更新插件源
./scripts/feeds install -a    # 执行后在下一步创建 .config 时才能看到相应的插件

# 第三步
make menuconfig

# 创建 .config 文件,这一步正是让许多小白玩家迷惑的步骤。
# 图形化的菜单虽然简化了操作,但里面那么多选项,到底哪些该选哪些不该选,完全是摸不着头脑
# 虽然能搜索到主菜单的一些说明,但很多具体选项依然不知道是干嘛用的
# 如果不清楚该选啥,最简单的办法是执行

make defconfig    # 生成一个默认配置后再 make menuconfig

# 然后在图形选项菜单中的 Luci ---> Applications 中选择想要的插件就行
# ====原则上,选择越少,编译越容易成功====重点,重点,重点
# 因为选项越多,越容易产生依赖冲突,少选为佳
# 缺少的功能可以以后再单独进行编译

# 第四步 
make download -j$

# 在软件源中下载上一步选中的插件的源码
# 软件源在 feeds.conf.default 中进行编辑,暂时略过,以后再说
# $ 代表的是线程数,用你的 CPU 线程+1就行,经测试,j5 以上就没有太明显的速度区别了

# 最后一步
make V=s -j1

# 开始编译,j1 表示用单线程编译,速度慢些,但首次编译成功率高些
# 根据官方文档还可以
make -j1 V=99 2>&1 | tee build.log | grep -i error

# 执行上条命令可以将编译过程的信息存储到 ./build.log, 在控制台仅高亮显示 error 信息
# 但蛋疼的是它会把所有含 error 字符串的信息全部高亮显示,包括一些正常的函数,比如 strerror()
# 平添诸多烦恼啊有木有

编译避坑指东

我本人感觉“墙”所带来的困扰是巨大的,编译过程中需要接入很多被“墙”的地址下载软件包,编译失败的原因有 99% 是下载失败造成的。

意思就是下面所说,可以避掉99%的坑。

梯子

几乎每个源码提供者都声明:“编译时要备好梯子”。备梯子是没问题,问题是不管 Ubuntu 还是 CentOS 所设置的系统代理,对于终端是无效的。

那么就得设置终端也要走代理。

# 终端全局代理配置:
vi ~/.bashrc    # 如果终端是 bash
vi ~/.zshrc    # 如果终端是 zsh

# 打开终端配置文件,加入以下命令:
export ALL_PROXY=socks5://<your_proxy_add>:<your_proxy_port>
# 你也可以直接在终端执行这条命令,区别是关闭终端后代理就取消了
# 当然也可以单独配置 http 和 https 代理(如果你的梯子不支持 socks)
export HTTP_PROXY=http://<your_proxy_add>:<your_proxy_port>
export HTTPS_PROXY=https://<your_proxy_add>:<your_proxy_port>

# 还有 golang 源也是无法下载成功的,需要换成国内镜像
# 在终端执行,或是在 ~/.bashrc 加入
export GOPROXY=https://proxy.golang.com.cn,direct
export GOPRIVATE=git.mycompany.com,github.com/my/private
# 国内 goproxy 的镜像还是蛮多的,可以自行搜索一下,然后根据官方的说明进行修改

# 最后如果修改了 ~/.bashrc 还需要执行
source ~/. bashrc    # 重载配置

# 有时候还会用到 wget 命令,也需要单独设置
# “特喵的怎么那么烦,一个全局代理搞不定么?”

vi /etc/wgetrc

# 然后把 use_proxy = off 改为 on,并取消注释
use_proxy = on

经过前面的设置,软件包的下载就比较流畅了。前提是你的梯子要没问题。

个人认为这种时候还是在路由器上开启代理比较好,可以实现全局代理,没必要进行繁琐的设置。

更多

排除 Makefile 自带的错误,大神可以自行修改,我等小白无能为力以外;以上也说过了,编译中所含的软件包越少越好,能有效提高成功率。

至此,如果固件包没问题应该能顺利编译,再踩到坑的话继续在这里更新。

原文标题:Openwrt 编译失败原因汇总(持续更新)
原文链接:https://ixcrap.com/reasons-for-openwrt-compilation-failure.html
本站文章部分素材来源于网络,如有侵权请联系博主删除。文章可随意转载,但请保留原文出处。
尊重他人知识产权和劳动成果是互联网共享精神的基石!


发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

* 疑问 吐舌 沮丧 魔鬼 惊讶 微笑 害羞 可爱 汗 可怕 晕 酷 大笑 生气 眯眼 萌萌哒 勾引 色 亲 骄傲 哭 坏笑

还没有评论,快来坐沙发吧~