2011-06-19 2 views
0

Je suis en train de mettre en place un environnement de travail pour assembler un bootloader et compiler et lier un noyau simple selon cette page: enter link description hereMini OS: Relier les fichiers compilés et assemblés .o

Jusqu'à présent, tout va bien , mais je ne peux pas sembler contourner cette erreur d'éditeur de liens:

C:\Users\----\Desktop\>ld -T linker.ld -o kernel.bin --oformat binary loader.o kernel.o 
ld: cannot perform PE operations on non PE output file 'kernel.bin'. 

Les pages de manuel ld sont à mon avis beaucoup trop cryptique, et ne donne pas de réponse à ce message d'erreur particuler.

(j'utilise Windows 7 64 bits)

+0

La compilation d'un noyau sur Windows est un enfer mais pas impossible. –

+0

Il est déjà compilé. Mon problème réside dans le processus de liaison. – Janx

+0

Lier est une partie du processus de compilation, et c'est la partie réelle que je mentionnais par le mot "enfer". :) –

Répondre

0

Je suis passé par une partie de cet article OSDev, mais sur une machine Linux. Tout d'abord, je tiens à souligner que la deuxième phrase de la préface indique que vous devez configurer un GCC Cross Compiler puisque vous êtes sur une machine Windows. Mais je crois en particulier votre erreur sur le fichier de sortie PE a à voir avec la façon dont ld est configuré pour Windows vs Linux. Linux utilise le format ELF pour les fichiers exécutables, tandis que Windows utilise le format PE. Ce sont deux manières très différentes de représenter un fichier programme/exécutable. Pour le didacticiel OSDev, vous devez lier le noyau au format ELF.

Si vous suivez l'article sur la configuration d'un compilateur croisé GCC, vous devriez vous rendre à la section sur la construction de 'binutils'. Assurez-vous que votre cible est configurée pour être i586-elf. Continuez à suivre l'article et vous devriez être en mesure de configurer l'éditeur de liens ld pour lier à une cible ELF au lieu du format PE.

+0

Aussi on peut user DJGPP utils. DJGPP toolkit contient des programmes aussi utiles que ld86, as86 et gcc :-) Et bien sûr, ils sont compatibles avec la compilation croisée. –

Questions connexes