我正在尝试在64位Mac OS X Lion上运行一个基本的汇编文件,使用默认安装的nasm和ld(随Xcode一起安装)。
我编写了一个汇编文件,它打印一个字符,并使用nasm进行构建。
nasm -f elf -o program.o main.asm
但是,当我试图用ld链接它时,出现了相当多的错误/警告:
ld -o program program.o
ld: warning: -arch not specified
ld: warning: -macosx_version_min not specificed, assuming 10.7
ld: warning: ignoring file program.o, file was built for unsupported file format which is not the architecture being linked (x86_64)
ld: warning: symbol dyld_stub_binder not found, normally in libSystem.dylib
ld: entry point (start) undefined. Usually in crt1.o for inferred architecture x86_64
所以,我尝试解决了其中的一些问题,但没有任何进展。
这是我尝试过的一个方法:
ld -arch i386 -e _start -o program program.o
我认为这个方法会起作用,但我错了。
如何使目标文件与nasm和ld兼容的体系结构相同?
另外,如何定义程序的入口点(现在我正在使用global _start
在.section text
上方,而_start
似乎没有起到什么作用。)
我有点困惑,不知道如何使用ld将目标文件成功链接到二进制文件,并且我认为我只是缺少一些代码(或对nasm或ld的参数),可以使它们达成一致。
感谢任何帮助。
main
作为入口点)。另一个尝试的方法是使用mach
对象文件格式而不是elf
。 - user786653