【发布时间】:2011-10-20 21:53:17
【问题描述】:
我正在尝试使用 64 位 Mac OS X Lion 运行一个基本的程序集文件,使用 Xcode 默认安装的 nasm 和 ld。
我编写了一个汇编文件,它打印一个字符,并使用 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 同意的兼容架构?
另外,你将如何定义程序中的入口点(现在我在.section text 中使用global _start,它在_start 之上,这似乎没有多大用处。 )
对于如何使用 ld 成功地将目标文件链接到二进制文件,我有点困惑,而且我认为我只是缺少一些代码(或 nasm 或 ld 的参数),这将使他们同意。
任何帮助表示赞赏。
【问题讨论】:
-
您是否尝试过使用 gcc 而不是 ld 进行链接?它通常要容易得多,您可以使用 C 运行时和标准库(例如,将
main作为入口点)。要尝试的另一件事是使用mach对象文件格式而不是elf。
标签: macos assembly nasm ld object-files