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); } }
3 Réponses :
fourniture -m32 code> au lieu de
-march = i686 code>. p>
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 code> à l'invocation
ld code>.
En fait fonctionne p> -M32 code> Vous pouvez garder -march = i686 ...
gcc -c -g -Os -march=i686 -m64 -ffreestanding -Wall -Werror test.c -o test.o
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
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.
`.code16 'ou` .Code16GCC' Directive Avant que les instructions de la langue de montage ne soient utilisées en mode 16 bits.