J'écris un noyau C++ pour mon propre système d'exploitation hobby. Je travaille sur un mac, et compilé un compilateur croisé de travail (jusqu'à maintenant) à partir de la version 4.8.2 de gcc.Le lieur ne parvient pas à trouver les bibliothèques standard
Actuellement, j'ai un fichier kernel.cpp
, contenant seulement une fonction main()
et quand je compile et lier seulement ce fichier, tout fonctionne très bien. Cependant, quand j'ajoute une classe, dans un autre fichier, l'éditeur de liens commence à se plaindre:
/opt/cross/gcc-i686-elf/lib/gcc/i686-elf/4.8.2/../../../../i686-elf/bin/ld: cannot find -lstdc++
/opt/cross/gcc-i686-elf/lib/gcc/i686-elf/4.8.2/../../../../i686-elf/bin/ld: cannot find -lm
/opt/cross/gcc-i686-elf/lib/gcc/i686-elf/4.8.2/../../../../i686-elf/bin/ld: cannot find -lc
/opt/cross/gcc-i686-elf/lib/gcc/i686-elf/4.8.2/../../../../i686-elf/bin/ld: cannot find -lc
Je trouve que ce sont toutes les bibliothèques standard manquantes, non?
Un détail intéressant est que lorsque j'ajoute la même classe au kernel.cpp
au lieu d'un nouveau fichier, cela fonctionne comme un charme.
Quelqu'un peut-il m'aider avec où je devrais trouver ces bibliothèques, et comment je peux les obtenir si elles ne sont pas disponibles? Devraient-ils venir avec le compilateur croisé ou devraient-ils déjà être disponibles sur mon macOS?
Voilà comment je construis mon code:
i686-elf-g++ -Wall -ffreestanding -m32 vga/vga.cpp kernel.cpp -o kernel.bin
Toute aide est la bienvenue, merci!
Merci Sjur, je savais que j'étais seul. Je passe déjà le drapeau --ffreestanding au compilateur. J'ai mis à jour la question avec les commandes que j'exécute pour construire et lier le code. – Pieter
[Trouvé comme wiki osdev.] (Http://wiki.osdev.org/Why_do_I_need_a_Cross_Compiler%3F#Options_that_you_should_pass_to_your_Compiler) Vous devez également ajouter -nostdlib et -lgcc. –
Merci, -nostdlib a fait l'affaire! Merci également d'avoir signalé cette page sur OSDev. J'ai vu beaucoup de leurs pages dans la recherche d'une réponse, mais je n'ai pas trouvé celui-ci. – Pieter