Jessaie de lier certains fichiers. Voici ma commande:

gcc -T linker.ld -o Stack\ Berry.bin -ffreestanding -O2 -nostlib kernel.o boot.o -fPIC -lgcc 

Cependant, jobtiens cette erreur:

/usr/bin/ld: boot.o: relocation R_X86_64_32 against `.multiboot" can not be used when making a PIE object; recompile with -fPIC /usr/bin/ld: final link failed: Nonrepresentable section on output 

Jai inclus largument -fPIC, est-ce que je viens de le mettre au mauvais endroit? Je nai « rien trouvé sur la syntaxe de ce drapeau. Merci!

Commentaires

  • Le doit être appliquée pendant la phase de compilation (la commande qui génère les fichiers objets) je pense – plutôt que la phase de liaison, comme vous le montrez
  • Cela ne ' t semble fonctionner. Je lai essayé en compilant le code GAS (pas un argument), et la commande qui génère le fichier objet. Cela ne semble pas fonctionner. gcc -fPIC -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
  • (1) Ma première hypothèse (et cest seulement une supposition) était quil sagissait dun problème dordre de la ligne de commande. Avez-vous essayé de modifier lordre de la commande ligne? (2) En fait, la lecture de lerreur «recompiler avec -fPIC» me fait douter de ma première supposition et je crois que @steeldriver a la bonne idée.… (suite)
  • (suite)… (3) Les gens diront que cette question est hors sujet ici, et quelle appartient à Stack Overflow . Je pense quelle concerne le sujet ici, mais Je reconnais quil est susceptible dobtenir une réponse plus rapide et plus précise en cas de Stack Overflow . Si vous nobtenez pas de réponse ici et que la question nest pas migrée, je vous suggère de la signaler et de demander quelle soit déplacée. Veuillez ne pas simplement republier la question.
  • Oui, jai essayé de modifier lordre.

Réponse

Votre boot.o a une .multiboot section elfe, qui est incompatible avec -fPIC. Vous pouvez essayer de compiler boot.o avec -fPIC mais cela devrait échouer.

Voir https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format pour len-tête.

Dun autre côté, créer un objet amorçable avec -fPIC. Même sil y avait un « chargeur dynamique », il ne peut « pas y avoir de lien dynamique avec quoi que ce soit pendant le processus de démarrage.

Commentaires

  • Je nai pu trouver des informations que sur len-tête et la valeur de lindicateur, et cela correspondait à mon boot.s. BTW le boot.o est un fichier objet, non compilable, comme il devrait lêtre.
  • Quessayez-vous de réaliser en compilant / liant votre .bin avec -fPIC?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *