2013-02-21 111 views
1

所以,我写了一些关于asm的指令,并编译它们。在mac os上编译汇编程序在nasm上

nasm -f macho test.asm 

现在,NASM生成OBJ文件,test.o

gcc test.o 

返回下一个错误:

  • ld: warning: ignoring file test.o, file was built for unsupported file format which is not the architecture being linked (x86_64)
  • Undefined symbols for architecture x86_64: "_main", referenced from:
  • start in crt1.10.6.o ld: symbol(s) not found for architecture x86_64 collect2: ld returned 1 exit status
在一行gcc

,我使用-arch I386(x86_64的),返回相同错误。

任何人都可以帮忙吗? :)

+0

难道你试试'-f macho64'而不是'macho'? – Matthias 2013-02-21 09:59:11

回答

0

macho是一个32位格式。
尝试使用macho64而不是macho。整条生产线:

nasm -f macho64 test.asm 
+3

Coodey,NASM返回: 致命:无法识别的输出格式'macho64' - 使用-hf列表 输入'nasm -h'寻求帮助。和nasm -hf返回这个http://joxi.ru/b6soUdg5CbCIUDRXAyo – Aleeewka 2013-02-23 11:42:19

+0

@Aleeewka是的,当我开始在Mac上使用'nasm'时,我遇到了同样的错误。你必须得到它的最新版本。 – qwertz 2013-02-23 12:02:51

+0

库代,我下载最新版本。你可以在最后使用macho64吗? – Aleeewka 2013-02-24 09:42:09

3

这些命令为我工作(OS X 10.10 64位):

nasm -f macho test.asm -DDARWIN 
ld -o test test.o -arch i386 -lc -no_pie -macosx_version_min 10.10 
+0

这对我有用 – 2017-01-31 00:33:48

0

尝试更新乌尔NASA的版本,并使用以下CMD线:

/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}