ubuntu 18.04 编译openwrt vmdk镜像错误 && 通用错误解决思路

sudo apt-get install qemu

先贴vmdk镜像错误解决方案↑(但如果你并不是这个问题也可以稍稍看完这篇文章/直接看最后一句话,因为你的问题也许像我一样网上并不能找到答案,而能解决问题的是排查问题的方法)
ps:长信息段请看选中。

近日学习开发openwrt,使用虚拟机ubuntu18.04环境,想通过拉取源码并编译得到VMware(虚拟机)镜像.vmdk文件,总在最后/openwrt/target/linux/x86/image的编译阶段出错,错误如下:

可以知道是在linux编译阶段失败。

而后面的recipe for target “world failed”在网上搜寻后发现该种错误并不少见,都可归纳为“recipe for target” 的依赖错误,多为包编译冲突/缺少

网上案例多为贴出上述错误,然后根本没有人回答什么解决方案,因为,这根本不是真正的error所在,所以无法回答(或者有人给了解决方案,然而有的人说行,有的人说不行)。因为这只是出错后的结果(所以同样的该错误会找到各种解决方案,然后发现与你无瓜),根本不具备可排查性,我们应该把具体的错误信息打印出来。

看到少有的回复有效的还是个贴吧帖子,包冲突问题,在make menuconfig 中只选一个(这个帖子一下找不到了,但如果你也是大量查找解决办法应该看到过,楼主贴出的错误信息很细,所以才有人回复了有效的解决犯法,因为里面其实就有答案,而笼统贴出recipe for target XXX基本没有解决案例的回复)。

此时需要读者在编译时加入V=s输出详细信息。

在openwrt目录下:

make V=s -jn
(n代表几核运行,有文章说第一次用1核避免error,但本人实验直接拉满并无问题,应该是避免多核并行时钟周期内同时修改引用之类的错误)

会发现最终的输出依旧如一开始,但别急,请往上翻阅,找到最开始的recipe for target xxx failed输出再上一段的输出,仔细查看,应该还会发现有failed,如下图选中行。

阅读后发现:

具体的错误可以追溯到它的上一行,因为这个waring而导致了下面一系列操作的failed。

首先进行控制变量测试

在make menuconfig中去除掉image vmdk的选项

发现编译成功,确定问题所在,回到上图,初步判断是qemu-img没有安装,导致失败,这也解释了为什么“recipe for target world”之上还有“recipe for target install”的错误。

理论上这种应该是openwrt编译过程自行处理的,那怎么出问题了呢?

我们前往openwrt编译源码目录查找image编译过程ctrl+f 查找qemu-img关键字(其他问题同样在下述链接include目录中查找)

https://github.com/openwrt/openwrt/blob/5876ba6460f14b4467812bdd76b9f3db323afb33/include/image-commands.mk

发现假如没有qemu-img命令就会有该错误,所以应该安装qemu-img即可解决,但事实上网上教程有很多其他包的安装提醒,并没有该包(所以我能水这篇文章了)。

继续深入源码,发现在默认配置中有相应操作↓

于是实锤是qemu-img这个本该被自动安装,所以在各类教程中可能并没有强调安装qemu-img,那就安装看看

却发现安装失败,尝试直接安装qemu,发现成功,所以也许是版本问题,openwrt中该配置与ubuntu18.04的库并不匹配,以后也许还会有类似问题。(都看到这了,赶紧看下你的错误翻下源码,也许就发现跟我一样冤)。

再次执行make命令,发现编译成功,输出目录,有相应文件

所以正确操作的应该是在error之上编译过程中查找在哪个环节failed出错,然后对应更改或安装相应依赖。而只查error往往是无所吊用。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值