Bazel搭配GHS ARM编译器归档命令执行失败问题排查
GHS编译器归档命令异常问题排查
背景
在嵌入式项目中使用GHS编译器生成.elf和.hex文件,已通过代码配置CcToolchainConfigInfo,该配置在其他嵌入式项目中运行正常,但某项目执行归档命令时出现异常。
项目配置差异
异常项目与正常项目的BUILD配置唯一差异:异常项目的cc_library的srcs和hdrs使用了Tree artifact(目录类型的depset)。
观察结果
- 编译成功完成,所有
.o目标文件均已生成且可用; - 归档器生成的
.params文件无目标文件路径:移除自定义GHS归档器配置后,.params会正常列出.o路径,但附带GHS不支持的默认flags; - 对比了有无归档器配置时的
libproject_lib_p4.a-2.params文件内容。
问题
请问问题的根源是什么?是否由Tree artifact的使用导致?
解答
大概率是Tree artifact的使用与自定义GHS归档器配置的兼容性问题导致的。
原因在于:当cc_library的srcs/hdrs采用Tree artifact时,Bazel处理依赖传递时的目标文件路径解析逻辑会发生变化。默认的归档器逻辑能正确遍历Tree artifact下的.o文件,但你的自定义GHS归档器配置没有适配这种场景——缺少对Tree artifact类型依赖的路径提取处理,导致生成.params文件时无法正确收集到.o文件路径。
验证与修复方向
- 临时将异常项目的
srcs/hdrs替换为普通文件而非Tree artifact,重新执行归档命令,确认.params是否能正常生成目标文件路径; - 检查自定义GHS归档器的配置代码,补充处理Tree artifact的逻辑:显式遍历Tree artifact中的文件并提取路径,将其添加到归档参数列表中。
内容的提问来源于stack exchange,提问作者ajayg2808
相关产品推荐
相关产品推荐

