3

所以,我在 asm 上写了一些指令,然后编译它们。

nasm -f macho test.asm

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

gcc test.o 

返回下一个错误:

  • ld:警告:忽略文件 test.o,文件是为不受支持的文件格式构建的,该文件格式不是被链接的体系结构 (x86_64)
  • 架构 x86_64 的未定义符号:“_main”,引用自:
  • 从 crt1.10.6.o 开始 ld:未找到架构 x86_64 collect2 的符号:ld 返回 1 退出状态

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

有人可以帮忙吗?:)

4

3 回答 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
于 2015-04-29T17:32:55.817 回答
1

macho是 32 位格式。
尝试使用macho64而不是macho. 完整线路:

nasm -f macho64 test.asm
于 2013-02-21T15:44:14.913 回答
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}
于 2016-07-24T09:02:48.370 回答