我是新的汇编编程,所以我提前道歉。
我在MacOS
和nasm
中链接我的第一个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
。
2条答案
按热度按时间5lwkijsr1#
此外,如果您的源代码使用
_start
入口点,您可以使用-e _start
命令行选项和ld
,告诉它使用_start
而不是_main
。我通常修改源代码以使用
_main
,但这是一个替代解决方案。up9lanfz2#
在macOS上,请确保使用下划线定义
_main
入口点,如下所示:此外,使用Linux系统调用号的代码在解决这个问题和其他一些问题之前不会在macOS上工作:请参阅 * 无法编译程序:CMach-O 64位格式不支持32位绝对地址 *