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目录中查找)
发现假如没有qemu-img命令就会有该错误,所以应该安装qemu-img即可解决,但事实上网上教程有很多其他包的安装提醒,并没有该包(所以我能水这篇文章了)。
继续深入源码,发现在默认配置中有相应操作↓
于是实锤是qemu-img这个本该被自动安装,所以在各类教程中可能并没有强调安装qemu-img,那就安装看看
却发现安装失败,尝试直接安装qemu,发现成功,所以也许是版本问题,openwrt中该配置与ubuntu18.04的库并不匹配,以后也许还会有类似问题。(都看到这了,赶紧看下你的错误翻下源码,也许就发现跟我一样冤)。
再次执行make命令,发现编译成功,输出目录,有相应文件
所以正确操作的应该是在error之上编译过程中查找在哪个环节failed出错,然后对应更改或安装相应依赖。而只查error往往是无所吊用。