9
votes

Instruction X86-64 non supportée Erreur lors de la compilation du fichier C

J'essaie de suivre les tutoriels dans Ce lien .

Lorsque je passe à la partie où je commence à effectuer un fichier test.c, j'essaie d'exécuter la première ligne de compilation. P>

ENTRY(main);
SECTIONS
{
    . = 0x7C00;
    .text : AT(0x7C00)
    {
        *(.text);
    }
    .sig : AT(0x7DFE)
    {
        SHORT(0xaa55);
    }
} 


1 commentaires

`.code16 'ou` .Code16GCC' Directive Avant que les instructions de la langue de montage ne soient utilisées en mode 16 bits.


3 Réponses :


15
votes

fourniture -m32 au lieu de -march = i686 .


2 commentaires

J'ai fait cela et cela fonctionne, mais il y a deux autres lignes de compilation données dans le tutoriel. La deuxième ligne 'ld -static -testest.ld -nostdlib --nmagic -o test.ft test.o' me donne l'erreur de 'ld: i386 architecture du fichier d'entrée `test.o' est incompatible avec i386: x86- 64 Sortie '. J'ai fait la modification de la question avec le code LD pour que vous puissiez voir


Fourniture -Melf_I386 à l'invocation ld .



5
votes

En fait Ajouter fort> -M32 code> Vous pouvez garder -march = i686 ... xxx pré>

fonctionne p>

gcc -c -g -Os -march=i686 -m64 -ffreestanding -Wall -Werror test.c -o test.o


0 commentaires

-2
votes
gcc -std=c99 -c -g -Os -march=i686 -m32 -ffreestanding -Wall -Werror test.c -o test.o
ld -static -T test.ld -m elf_i386 -nostdlib --nmagic -o test.elf test.o

1 commentaires

Cette réponse n'ajoute rien de nouveau. Il semble que ce soit une tentative de résumer tous les conseils dans les autres réponses.