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
相关产品推荐
相关产品推荐

