簡體   English   中英

ld:警告:找不到入口符號_start; 默認為 0000000000401000

[英]ld: warning: cannot find entry symbol _start; defaulting to 0000000000401000

這是我在 Linux Ubuntu 中編寫匯編語言代碼時遇到的錯誤。 誰能幫我解決錯誤?

這是我使用命令ld -o quadratic quadratic.o時出現的錯誤

即將到來的錯誤圖像。

我的 asm 文件的代碼是這樣的:

https://github.com/vedantdawange/ASM-Files/blob/main/quadratic.asm

ld本身不鏈接任何庫或啟動代碼。 它適用於使用_start作為入口點並通過直接調用 kernel 而不是標准 C 庫函數來執行 I/O 的程序。 但是您的程序使用main作為其入口點,因此它期望被 C 啟動代碼調用,並且它調用諸如printf之類的庫函數。 因此,您應該像 C 程序一樣鏈接它:

gcc -no-pie -o quadratic quadratic.o

需要-no-pie選項,因為您的代碼絕對引用了 static 數據,例如fld qword[b] 默認情況下,gcc 假定您要構建與位置無關的可執行文件,但它不能這樣做; 您需要編寫fld qword[rel b]來生成相對於 rip 的有效地址。 所以-no-pie要求 gcc 鏈接一個非位置無關的可執行文件。 請參閱為什么在 NASM 中使用 RIP 相對尋址? 了解更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM