如何解决bitbake编译imx-image-core时的oe_runmake failed错误?
问题分析
从日志里的关键信息来看,两个错误存在因果关系:
Error: open CFI at the end of file; missing .cfi_endproc directive是衍生问题,本质是编译进程被强制终止后,生成的临时汇编文件不完整导致的;- 核心问题是
g++: fatal error: Killed signal terminated program cc1plus——Ubuntu系统的内存不足(OOM)杀手机制,因为编译gcc-cross组件需要大量内存,VMware虚拟机分配的内存不够,所以直接终止了cc1plus(gcc编译后端进程)。
修复方案
1. 提升VMware虚拟机内存分配
- 关闭Ubuntu虚拟机,打开VMware的虚拟机设置;
- 找到「内存」选项,将内存调整到8GB及以上(推荐16GB,Yocto编译对内存需求较高);
- 重启虚拟机后,重新执行
bitbake imx-image-core。
2. 调整bitbake并发编译参数
修改conf/local.conf文件,添加或调整以下参数,避免同时启动过多编译进程耗尽内存:
# 根据虚拟机CPU核心数设置,比如4核CPU就设为4,内存紧张可下调至2 BB_NUMBER_THREADS = "4" PARALLEL_MAKE = "-j 4"
3. 临时启用交换分区(缓解内存压力)
如果暂时无法提升物理内存,可创建临时交换分区:
# 创建4GB交换文件 sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
编译完成后若不需要,可关闭并删除交换分区:
sudo swapoff /swapfile sudo rm /swapfile
验证步骤
先清理之前的编译残留:
bitbake -c cleanall gcc-cross-aarch64
再重新执行编译命令:
bitbake imx-image-core
内容的提问来源于stack exchange,提问作者Makoto
相关产品推荐
相关产品推荐

