所以,我在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),返回相同的错误。
有人可以帮忙吗? :)
答案 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}