2013-10-05 11 views
15

Sto provando a creare un kernel semplice utilizzando Ubuntu. Nel terminale ho digitatoL'architettura del file di input i386 non è compatibile con i386: x86-64

ld -Ttext 0x1000 -o kernel.bin loader.o main.o Video.o 

Ma ho ottenuto il seguente messaggio di errore in cambio:

ld: i386 architecture of input file `loader.o' is incompatible with i386:x86-64 output 
    ld: warning: cannot find entry symbol _start; defaulting to 0000000000001000 

risposta

20

Usa 64 bit invece di 32 per il caricatore e compilarlo con il seguente comando:

nasm -f elf64 loader.asm -o loader.o 

Questo dovrebbe risolvere il tuo errore

22

Se vuoi compilare il file la composizione 32 bit, è possibile utilizzare:

ld -m elf_i386 -s -o file.o file di

+4

Questa era la soluzione. Durante la compilazione/collegamento di app a 32 bit su x86_64, l'impostazione dell'emulazione su 'elf_i386' fornisce il formato elfo corretto. Quindi, per esempio, se si compila un'app assembler con 'nasm -f elf file.asm -o file.o', il comando link è' ld -m elf_i386 -o exename file.o'. –

+1

Basta non dimenticare di sostituire '-o file.o file' con' -o file file.o'. – Ruslan

2

Quando si compila/che collega le applicazioni a 32 bit su x86_64, l'impostazione di emulazione per elf_i386 fornisce il formato ELF corretto. Quindi, ad esempio, se si compila un'app assembler con nasm -f elf file.asm -o file.o, il comando di collegamento è ld -m elf_i386 -o exename file.o Cortesia: David

Problemi correlati