2010-05-25 20 views
4

j'ai quelques problèmes avec DOI nasm pour macos:lien programme nasm pour mac os x

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) 

quelqu'un peut me aider?

Répondre

7

L'éditeur de liens Mac OS X ne peut pas lier les objets ELF. Cela fonctionne uniquement avec le format exécutable Mach-O. À moins que vous ne vouliez savoir comment traduire les fichiers objets, vous feriez probablement mieux d'écrire du code qui fonctionne avec l'assembleur de Mac OS X. Editer: Comme le mention @Fry dans le commentaire ci-dessous, vous pouvez faire nasm éteindre les objets Mach-O. Dans ce cas, le problème est simple - prenez le _ de _start dans les deux endroits dans votre fichier source. Le résultat est bon.

+0

frire $ nasm -f macho test.asm frire test.o test -o $ ld -arch i386 ld: n'a pas pu trouver le point d'entrée "start" (pe rhaps manquant crt1.o) –

+0

@Fry, édité avec la réponse dont vous avez besoin. Aussi - allez accepter quelques réponses. –

6
nasm -f macho test.asm 

ld -e _start -o test test.o 
0

Pour les personnes qui ont besoin de rester avec le format elfe et se développer sur un Mac, vous avez besoin d'un compilateur croisé ...

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

Ensuite, vous pouvez procéder à quelque chose de semblable à cela. ..

/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