这是我在Linux Ubuntu中编写汇编语言代码时遇到的错误。有人能帮我解决这个错误吗?
这是我使用命令ld -o quadratic quadratic.o
时出现的错误
即将到来的错误图像。
我的asm文件的代码是:
https://github.com/vedantdawange/ASM-Files/blob/main/quadratic.asm
ld
本身不链接库或启动代码。它适用于使用_start
作为入口点并通过直接调用内核而不是标准C库函数进行I/O的程序。但是您的程序使用main
作为其入口点,因此它希望由C启动代码调用,并且它调用像printf
这样的库函数。因此,你应该像C程序一样链接它:
gcc -no-pie -o quadratic quadratic.o
需要-no-pie
选项,因为您的代码绝对引用静态数据,例如fld qword[b]
。默认情况下,gcc假设您想要构建一个与位置无关的可执行文件,但无法做到这一点;您需要编写fld qword[rel b]
来生成rip相对有效地址。所以-no-pie
要求gcc链接一个非位置无关的可执行文件。请参阅为什么在NASM中使用RIP相对寻址?了解更多信息。