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

如何在ARM架构Ubuntu 20.04系统下正确编译汇编程序解决ld报错

问题原因分析
  • 你编写的是32位ARM(ARMv7/AArch32)架构的汇编代码,而当前使用的是64位ARM(AArch64/arm64)架构的Ubuntu系统,默认系统链接器ld为arm64版本,无法识别32位目标文件,因此报file in wrong format错误
  • nasm是仅面向x86/x86_64架构的汇编器,完全不兼容ARM架构,因此无法处理你的ARM汇编代码
解决方法

提供两种可行方案,按需选择即可:

方案1:改写为arm64原生汇编(无额外依赖,推荐)

将hello.s内容替换为适配arm64架构的汇编代码:

.text
.global _start
_start:
    mov x0, #1
    adrp x1, message
    add x1, x1, :lo12:message
    mov x2, #12
    mov x8, #64
    svc #0

    mov x8, #93
    svc #0

.data
message:
    .asciz "hello world\n"

依次执行以下命令编译运行:

# 编译生成目标文件
as hello.s -o hello.o
# 链接生成可执行文件
ld hello.o -o hello
# 运行程序
./hello

方案2:保留原有32位代码,安装32位兼容环境

如果需要继续使用原来的32位ARM汇编代码,可以安装armhf架构兼容组件:

  1. 开启armhf架构支持并安装依赖:
sudo dpkg --add-architecture armhf
sudo apt update
sudo apt install gcc-arm-linux-gnueabihf libc6:armhf
  1. 编译链接32位程序:
# 编译32位目标文件
arm-linux-gnueabihf-as hello.s -o hello.o
# 使用32位链接器生成可执行文件
arm-linux-gnueabihf-ld hello.o -o hello
# 运行程序
./hello

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:18:03