链接nasm程序为mac os x

时间:2010-05-25 22:03:30

标签: macos linker nasm

我在连接macos的nasm程序时遇到了一些问题:

GLOBAL _start
SEGMENT .text
_start:
    mov ax, 5
    mov bx, ax
    mov [a], ebx
SEGMENT .data
a   DW 0
t2  DW 0

fry$ nasm -f elf  test.asm
fry$ ld -o test test.o -arch i386
ld: warning: in test.o, file was built for unsupported file format which is not the architecture being linked (i386)
ld: could not find entry point "start" (perhaps missing crt1.

fry$ nasm -f macho  test.asm
fry$ ld -o test test.o -arch i386
ld: could not find entry point "start" (perhaps missing crt1.o)

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:7)

Mac OS X链接器无法链接ELF对象。它仅适用于Mach-O可执行格式。除非您想弄清楚如何翻译目标文件,否则编写适用于Mac OS X汇编程序的代码可能会更好。

编辑:正如@Fry在下面的评论中提到的那样,你可以让nasm放出Mach-O对象。在这种情况下,问题很简单 - 在源文件中的两个位置取_ _start。结果很好。

答案 1 :(得分:6)

nasm -f macho test.asm

ld -e _start -o test test.o

答案 2 :(得分:0)

对于需要坚持使用elf格式并在mac上开发的人来说,你需要一个交叉编译器......

http://crossgcc.rts-software.org/doku.php?id=compiling_for_linux

然后你可以继续进行类似的事情......

/usr/local/gcc-4.8.1-for-linux32/bin/i586-pc-linux-ld -m elf_i386 -T link.ld -o kernel kasm.o kc.o