在Mac OS上使用nasm编译汇编代码

3

所以,我编写了一些关于汇编的指令,并对它们进行了编译。

nasm -f macho test.asm

现在,nasm生成obj文件,test.o。
gcc test.o 

下面是返回的错误:

  • ld: 警告:忽略文件 test.o,该文件仅供不支持的文件格式构建(不是正在链接的体系结构 x86_64)
  • 未定义符号 针对架构 x86_64: "_main",引用来自:
  • crt1.10.6.o 中的 start ld:找不到符号(s)以获取架构 x86_64 collect2:ld 返回 1 退出状态

在gcc行中,我使用了-arch i386(x86_64),返回相同的错误。

有人能帮忙吗? :)


你试过使用-f macho64而不是macho吗? - Matthias
3个回答

6
以下命令在我的电脑上(OS X 10.12 x64)有效:
nasm -f macho test.asm -DDARWIN
ld -o test test.o -arch i386 -lc -no_pie -macosx_version_min 10.12 -lSystem

1

macho 是一种32位格式。
尝试使用 macho64 替代 macho。完整的行:

nasm -f macho64 test.asm

3
Coodey,NASM 返回: 致命错误:无法识别输出格式 macho64' - 使用 -hf 来查看列表。 输入 nasm -h' 获取帮助。而 nasm -hf 返回的是 http://joxi.ru/b6soUdg5CbCIUDRXAyo。 - Aleeewka
@Aleeewka 是的,当我在 Mac 上开始使用 nasm 时,我也遇到了同样的错误。你需要获取最新版本的它。 - qwertz
Coodey,我下载了最新版本。你可以在最新版本中使用macho64吗? - Aleeewka
2
@Aleeewka,我使用的版本是2.10.05(一段时间前更新的),而且macho64运行得非常好! - qwertz

0
尝试更新您的nasm版本并使用以下命令:
/usr/local/bin/nasm -f macho64 ${file}
ld  -o ${file_path}/${file_base_name} -e _main ${file_path}/${file_base_name}.o
${file_path}/${file_base_name}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接