同一Yocto分支不同层GCC版本不一致引发错误的解决咨询
1. 错误根源判断是否正确?
完全正确。Yocto中.bbappend文件必须与对应的.bb主配方文件名严格匹配(版本号部分也要一致)。你的环境里,meta-st-stm32mp层提供的gcc-source_12.2.bbappend需要匹配poky层的gcc-source_12.2.bb,但当前poky(Mickledore分支)默认使用GCC 12.3,对应的配方是gcc-source_12.3.bb,导致bbappend找不到可追加的主配方,触发报错。
2. 除等待ST更新BSP外的解决办法
以下是几种可行的手工修复方案:
方案一:修改bbappend文件名适配当前GCC版本
直接将meta-st-stm32mp/recipes-devtools/gcc/gcc-source_12.2.bbappend重命名为gcc-source_12.3.bbappend。
注意:如果该bbappend内有针对GCC 12.2的特定补丁或配置,需检查这些内容是否兼容12.3版本,若存在版本相关硬编码需同步修改。方案二:强制指定使用GCC 12.2版本
在构建目录的conf/local.conf中添加以下配置,强制Yocto使用GCC 12.2:PREFERRED_VERSION_gcc-source = "12.2" PREFERRED_VERSION_gcc = "12.2" PREFERRED_VERSION_gcc-cross-arm = "12.2" PREFERRED_VERSION_gcc-cross-armhf = "12.2"注意:这种方法需要确保
poky层中存在GCC 12.2的配方文件,若没有,需从旧分支(如Dunfell)移植对应的gcc-source_12.2.bb及相关文件,或检查是否有第三方层提供该版本配方。方案三:移除或注释冲突的bbappend文件
如果gcc-source_12.2.bbappend中的内容对构建非必需,可直接将该文件重命名(如加.bak后缀)或删除,暂时跳过该追加配置。
注意:此方法仅适用于该bbappend无STM32MP1专属关键编译配置的情况,若后续出现编译问题,需重新评估是否恢复并适配。
内容的提问来源于stack exchange,提问作者mlx11

