[英]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.