web-dev-qa-db-fra.com

L'architecture du fichier d'entrée i386 est incompatible avec i386: x86-64

J'essaie de créer un noyau simple en utilisant Ubuntu. Dans le terminal, j'ai tapé

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

Mais j'ai reçu le message d'erreur suivant en retour:

    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
29
MEv2.0

Si vous souhaitez compiler le fichier en 32 bits, vous pouvez utiliser:

ld -m elf_i386 -s -o file file.o
39
Leandro Andrade

Utilisez 64 bits au lieu de 32 pour votre chargeur et compilez-le avec la commande suivante:

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

Cela devrait résoudre votre erreur

30
Drill

Lors de la compilation/liaison d'applications 32 bits sur x86_64, définissez l'émulation sur elf_i386 fournit le format elfe correct. Ainsi, par exemple, si vous compilez une application assembleur avec nasm -f elf file.asm -o file.o, la commande de liaison est ld -m elf_i386 -o exename file.o Avec l'aimable autorisation de David

5
4aRk Kn1gh7