升级Yocto至Sumo版本后Multilib引发do_image_wic构建错误
我在Yocto 2.5 Sumo版本上折腾Multilib配置的时候,刚好碰到过和你一模一样的问题——为了给genericx86架构弄64位grub-efi,加了配置之后do_image_wic死活找不到那个libtool脚本,手动复制完还出别的错。其实根源是交叉编译工具链的路径没被构建系统正确识别,下面是我亲测有效的解决步骤:
1. 补全Multilib环境变量配置
你的local.conf基础配置没问题,但缺少了工具链路径的关键声明,Yocto在Multilib模式下需要明确知道去哪里找64位交叉工具。把下面的内容添加到local.conf里:
require conf/multilib.conf MULTILIBS = "multilib:lib64" DEFAULTTUNE_virtclass-multilib-lib64 = "x86-64" IMAGE_INSTALL_append = " lib64-grub-efi" # 新增工具链路径配置,指定交叉脚本位置 TARGET_VENDOR = "-poky" TARGET_SYS_append_lib64 = "mlib64" TOOLCHAIN_PATH_lib64 = "${STAGING_DIR_TARGET}/usr/bin/crossscripts"
这个配置会直接告诉构建系统去你提到的那个路径找x86_64-pokymllib64-linux-libtool这类工具脚本。
2. 清理并重建工具链(别手动复制文件!)
手动复制文件是饮鸩止渴——Yocto的构建系统依赖自动生成的依赖链和链接,手动拷贝会打破这些关联,后续肯定出更多问题。执行以下命令彻底清理旧工具链并重新生成:
bitbake -c cleansstate meta-toolchain bitbake meta-toolchain
这一步会重新生成完整的Multilib交叉工具链,所有必要的脚本、链接都会乖乖待在正确的位置。
3. 确保grub-efi配方支持Multilib
有些版本的grub-efi配方默认没适配Multilib的lib64变体,你可以给它加个.bbappend文件来补全配置:
在你的自定义layer里创建meta-yourlayer/recipes-bsp/grub/grub-efi_%.bbappend,写入:
COMPATIBLE_HOST_lib64 = "x86_64.*-linux" EXTRA_OECONF_lib64 = "--target=x86_64-pokymllib64-linux"
这会明确告诉grub-efi配方,在lib64的Multilib模式下要针对x86_64目标编译。
4. 重新构建镜像
完成上面的配置后,清理之前的镜像构建状态,重新执行构建:
bitbake -c cleansstate [你的镜像名称] bitbake [你的镜像名称] bitbake [你的镜像名称] -c do_image_wic
这样一套操作下来,应该就能解决找不到libtool脚本的问题,也不会再出现手动复制带来的后续错误了。
内容的提问来源于stack exchange,提问作者Michael

