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

ARM64汇编循环打印Hello World报错:重定位及符号未定义问题

循环打印Hello World的AArch64汇编问题

问题背景

我正在通过编写代码学习函数与循环,以下是我编写的试图通过循环多次打印Hello World的AArch64汇编代码:

.global _start
_start:
    beq loop
        beq exit
loop:
    cmp x0, #0

    beq print

    sub x0, x0, #0
    beq exit

print: 
    mov x0, #0
    adrp x1, msg
    mov x2, #13
    mov x16, #4
    svc #0x80

    beq exit

exit:
    mov x0,#0
    mov x16, #1
    svc #0x80

.data
    msg: .ascii "Hello World!\n"

初始编译错误

编译运行代码时,出现以下错误:

error: ADR/ADRP relocations must be GOT relative
error: unknown AArch64 fixup kind!

修改后的链接错误

我尝试将代码中的adrp x1, msg替换为以下代码:

adrp x1, helloworld@page
add x1, x1, helloworld@pageoff

但编译链接时出现了符号未定义的错误:

Undefined symbols for architecture arm64:
"helloworld", referenced from:
_start in main.o
ld: symbol(s) not found for architecture arm64

补充说明:单独运行仅包含打印逻辑的代码时可以正常输出Hello World,但加入循环逻辑后就会触发上述错误。我使用的编译命令如下:

cc -c main.asm -o main.o
ld -o HelloWorld main.o -e _start
./HelloWorld

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:55:58