所以我在OS X上運行,我想鏈接兩個Mach-O對象i386。GNU鏈接器和體系結構i386
首先是從NASM生成(這是一個彙編文件)
nasm -f macho -o kernel.o kernel.asm
二是從GCC
gcc -c -arch i386 screen.c
產生但當我嘗試將它們連接...
ld -o myprogram screen.o kernel.o
...我得到這個錯誤:
Undefined symbols for architecture i386:
"print", referenced from:
start in kernel.o
ld: symbol(s) not found for inferred architecture i386
我不明白爲什麼,因爲我的兩個文件分別是Mach-O object i386
:
$ file screen.o
screen.o: Mach-O object i386
$ file kernel.o
kernel.o: Mach-O object i386
如果你需要它,這裏的kernel.asm:
[BITS 32]
EXTERN print
GLOBAL start
start:
mov eax, msg
push eax
call print
pop eax
end:
jmp end
msg db 'Hello world!', 10, 0
而這裏的screen.c:
void putcar(uchar c)
{
/* Some code here */
}
void print(char *string)
{
while(*string != 0){
putcar(*string);
string++;
}
}
你從來沒有好奇過在二進制文件中挖掘過嗎? :) – 2013-03-19 10:01:56