ld:警告:找不到入口符号_start;默认为00000000004010000



这是我在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相对寻址?了解更多信息。

最新更新