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

如何将C代码编译为ELF 32-bit LSB ARM version 1 (GNU/Linux)可执行文件

解决ARM GCC编译ELF OSABI为GNU/Linux的问题

要将编译生成的ELF文件的OSABI从SysV改为GNU/Linux,你可以通过给GCC传递链接器参数直接实现:

  • 修改编译命令,添加-Wl,--osabi=linux选项,完整命令如下:
    arm-linux-gnueabi-gcc -march=armv7-a -mthumb -mabi=aapcs-linux -Wl,--osabi=linux -o output_file input_file.c
    

原理说明

ELF文件的OS/ABI字段由链接器决定,默认情况下arm-linux-gnueabi-gcc会使用SysV(对应OSABI值0)。-Wl,--osabi=linux是GCC向链接器ld传递参数的写法,明确要求链接器将OSABI字段设置为GNU/Linux(对应OSABI值3)。

验证方法

编译完成后,用readelf工具检查结果:

arm-linux-gnueabi-readelf -h output_file

查看输出中的OS/ABI字段,应该显示为UNIX - GNU,对应你需要的ELF, 32-bit LSB executable, ARM, version 1 (GNU/Linux)格式。

备选方案(编译后修改)

如果无法重新编译,也可以用objcopy工具添加ABI-tag段来修改:

arm-linux-gnueabi-objcopy --set-section-flags .note.ABI-tag=alloc,load --add-section .note.ABI-tag=/usr/lib/arm-linux-gnueabi/gnu/libc.so output_file

注意:这个方法需要你的交叉编译环境中存在对应的libc.so文件,且不如编译时直接指定参数可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:42:03