在mac os上编译nasm中的汇编程序

时间:2013-02-21 08:37:54

标签: macos gcc assembly nasm

所以,我在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),返回相同的错误。

有人可以帮忙吗? :)

3 个答案:

答案 0 :(得分: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 :(得分:0)

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

nasm -f macho64 test.asm

答案 2 :(得分: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}