assembly ld:在MacOS / nasm上找不到体系结构x86_64的符号

smdnsysy  于 2023-05-23  发布在  Mac
关注(0)|答案(2)|浏览(191)

我是新的汇编编程,所以我提前道歉。
我在MacOSnasm中链接我的第一个Hello world汇编程序时遇到问题。

section .data
        text db "Hello World",10

section .text
        global _start

_start:
        mov rax, 1
        mov rdi, 1
        mov rsi, text
        mov rdx, 14
        syscall

        mov rax, 60
        mov rdi, 0
        syscall

我使用的是MacOS 10.13.6,所以我用nasm编译了它,如下所示,没有错误:

nasm -f macho64 -o test.o test.asm

但是当我使用ld链接时:

ld -arch x86_64 -macosx_version_min 10.13 test.o -o test

我收到以下错误消息:

Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64

我已经在我的linux发行版上测试过了,它工作得很好,所以我不确定MacOS有什么不同,因为我的两台电脑都是x86_64

5lwkijsr

5lwkijsr1#

此外,如果您的源代码使用_start入口点,您可以使用-e _start命令行选项和ld,告诉它使用_start而不是_main
我通常修改源代码以使用_main,但这是一个替代解决方案。

up9lanfz

up9lanfz2#

在macOS上,请确保使用下划线定义_main入口点,如下所示:

global  _main
_main:

此外,使用Linux系统调用号的代码在解决这个问题和其他一些问题之前不会在macOS上工作:请参阅 * 无法编译程序:CMach-O 64位格式不支持32位绝对地址 *

相关问题