objdump -i未显示全格式,求OUTPUT_FORMAT参数文档及取值
GCC链接器OUTPUT_FORMAT()命令:参数文档与取值说明
一、参数的官方文档参考
OUTPUT_FORMAT()是GNU链接器(ld)的脚本命令,而非GCC原生命令,相关细节需查看GNU ld的官方文档:
- 本地安装的工具链中,执行
man ld并搜索OUTPUT_FORMAT章节,会明确说明参数为BFD(Binary File Descriptor)库支持的目标文件格式名称。 - 若使用交叉编译工具链,对应工具链的ld手册会包含针对目标架构的格式说明。
二、为什么Windows上objdump -i看不到elf32-littlearm
你当前在Windows上运行的是面向x86/x86_64架构的binutils工具链,默认仅支持本地平台相关的目标格式,不包含ARM架构的格式。要获取ARM相关格式列表,需安装ARM交叉编译版本的binutils(如arm-none-eabi-binutils),安装后再执行objdump -i或ld -V,就能看到elf32-littlearm、elf32-bigarm等ARM专属格式。
三、获取支持的格式列表的通用方法
- 针对目标架构的交叉工具链中,执行
ld -V:会直接输出链接器支持的所有BFD目标格式。 - 执行
objdump -i:按架构分组列出支持的目标格式、架构和机器类型。 - 部分工具链包含
bfdinfo命令:可更详细地列出BFD库支持的所有格式及属性。
四、常见的OUTPUT_FORMAT参数取值示例
不同架构对应的常用格式:
- ARM架构:
elf32-littlearm(小端32位ARM ELF)、elf32-bigarm(大端32位ARM ELF)、armelf_linux_eabi(Linux平台ARM EABI格式) - x86/x86_64架构:
elf32-i386(32位x86 ELF)、elf64-x86-64(64位x86_64 ELF) - RISC-V架构:
elf32-littleriscv、elf64-littleriscv - 嵌入式场景:
binary(纯二进制裸机格式)、srec(S记录格式)、ihex(Intel Hex格式)
五、额外说明
如果链接脚本中未指定OUTPUT_FORMAT(),链接器会自动根据输入文件的格式或目标架构选择默认输出格式。交叉编译特定架构程序时,必须使用对应架构的交叉工具链,否则链接器无法识别该架构的目标格式。
内容的提问来源于stack exchange,提问作者abdo Salm
相关产品推荐
相关产品推荐

