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
때문에 : 여기
[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
: 그리고 당신이 그것을 필요로하는 경우에
$ file screen.o
screen.o: Mach-O object i386
$ file kernel.o
kernel.o: Mach-O object i386
, 여기 kernel.asm입니다 screen.c :
,451,515,void putcar(uchar c)
{
/* Some code here */
}
void print(char *string)
{
while(*string != 0){
putcar(*string);
string++;
}
}
전에 바이너리 파일을 파고 들지 않았습니까? :) –