You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ARMCompiler的fromelf转换Hex为Bin时生成异常文件的问题

解答:fromelf生成多文件问题分析与修复

1. 重命名text为my_target.bin是否正确?

这并不靠谱,大概率会导致程序运行异常。那个text文件只是fromelf提取出的ELF里的.text代码段,但你的程序很可能还有.data(初始化数据段)、.rodata(只读数据)甚至自定义段(比如你看到的mk_exceptiontable相关文件)。如果只拿.text段的内容,程序运行时需要的初始化数据、异常表等都会缺失,必然会出问题。只有当你的程序所有代码和数据都挤在.text段里时,这种做法才勉强能用,但几乎没有嵌入式程序会这么写。

2. 为什么会生成text、mk_exceptiontable这些文件?

问题出在你用的fromelf参数上!你写的--bin选项,在ARM Compiler 6的fromelf工具里,作用是把ELF文件里的每个可加载段单独提取成一个二进制文件,每个文件的名字对应段的名称(比如.text段生成text文件,mk_exceptiontable是你程序里定义的自定义段,所以生成对应的文件)。这完全不是你想要的“合并所有段生成单一bin文件”的效果。

3. 正确的做法:生成单一合并bin文件

ARM Compiler 6的fromelf提供了--bincombined选项,专门用来把所有可加载段合并成一个单一的二进制文件。修正后的命令应该是这样:

/opt/ARMCompiler6.6.1/bin/fromelf --bincombined --output path/to/generated/bin/file/my_target.bin path/to/target/my_target.elf

4. 修正后的CMake自定义命令

把你的ADD_CUSTOM_COMMAND改成下面这样,还可以用CMake的目标变量来避免硬编码路径,更灵活:

ADD_CUSTOM_COMMAND(
    TARGET my_target POST_BUILD
    COMMAND /opt/ARMCompiler6.6.1/bin/fromelf --bincombined --output path/to/generated/bin/file/my_target.bin $<TARGET_FILE:my_target>
    COMMENT "Converting ELF to combined binary file"
)

这里的$<TARGET_FILE:my_target>会自动替换成my_target目标生成的ELF文件的完整路径,不用你手动写path/to/target/my_target.elf。

内容的提问来源于stack exchange,提问作者Kennedy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:14:07