在Yocto(Zeus)SDK中添加avr-gcc时编译报错的问题排查
解决Yocto Zeus中nativesdk-avr-gcc编译时
-fmacro-prefix-map选项报错问题 问题根源
-fmacro-prefix-map是GCC 8及以上版本才支持的编译选项。你的报错是因为编译nativesdk-avr-gcc时,宿主g++版本低于GCC 8,无法识别该选项。而avr-gcc-native能正常编译是因为它的构建环境没有注入这个选项;nativesdk-avr-binutils不受影响,大概率是其构建脚本对不支持的选项做了兼容处理。
配方排查与修复方案
1. 直接过滤不支持的编译选项
在你的avr-gcc nativesdk配方中,显式移除-fmacro-prefix-map相关选项:
CFLAGS_remove = "-fmacro-prefix-map=${WORKDIR}=${BPN}-${PV} -fmacro-prefix-map=${STAGING_DIR_NATIVE}= -fmacro-prefix-map=${STAGING_DIR_HOST}= -fmacro-prefix-map=${STAGING_DIR_TARGET}= " CXXFLAGS_remove = "${CFLAGS_remove}"
2. 检查构建变量差异
对比avr-gcc-native和nativesdk-avr-gcc的构建环境变量,确认选项来源:
# 导出nativesdk-avr-gcc的构建变量 bitbake -e nativesdk-avr-gcc > nativesdk-avr-gcc.env # 导出avr-gcc-native的构建变量 bitbake -e avr-gcc-native > avr-gcc-native.env # 对比两个文件中的CFLAGS、CXXFLAGS等变量 diff nativesdk-avr-gcc.env avr-gcc-native.env | grep -E "(CFLAGS|CXXFLAGS)"
根据对比结果,针对性地移除nativesdk版本中额外注入的不兼容选项。
3. 禁用nativesdk自动注入的宏前缀映射
如果Yocto Zeus的nativesdk构建链默认注入该选项,可尝试在配方中禁用:
inherit nativesdk SDK_INJECT_MACRO_PREFIX_MAP = "0"
(若Zeus版本无此变量,优先使用第一种过滤方法)
验证操作
修改配方后,清理旧构建状态再重新编译:
bitbake -c cleansstate nativesdk-avr-gcc bitbake nativesdk-avr-gcc
观察编译日志,确认-fmacro-prefix-map选项已被移除,检查是否仍有报错。
内容的提问来源于stack exchange,提问作者Logan
相关产品推荐
相关产品推荐

