Depuis la version 4.8, le compilateur C ++ GCC (la partie G ++ de celui-ci) n'est plus écrit en C, mais en C ++ lui-même. J'ai une question hypothétique à ce sujet.
Je me demande comment compiler le code C ++ de GCC sur une nouvelle plate-forme qui n'a pas encore de compilateur C ++. Bien sûr, vous pouvez utiliser des binaires précompilés compilés sur d'autres machines. Ou vous pouvez utiliser une ancienne version de GCC écrite en C et compiler la version actuelle avec.
Cependant, sans binaires prédéfinis et juste la dernière version, vous étiez coincé, non? Sinon, y a-t-il d'autres implications sur cette situation soulevées par le passage du C au C ++ du projet GCC?
gcc
qu'avant 4.8 pourrait être construit avec le compilateur C emballé avec un système d'exploitation arbitraire (et cela vous limiterait à C89 sur beaucoup).Réponses:
Il s'agit en fait d'un concept bien connu appelé bootstrapping . Fondamentalement, il existe quelque part une base de code C minimale pour construire une version de GCC capable de construire la base de code GCC actuelle. Les langues auto-hébergées font des choses comme ça depuis des décennies.
la source
gcc
ne peut plus être construit par un compilateur ac uniquement. La seule garantie avec les compilations gcc qu'elles font est que la version gcc N peut être compilée avec la version gcc N-1.However, without prebuilt binaries and just the newest version, you were stuck, right? If not, are there other implications on this situation raised by the switch from C to C++ of the GCC project?
- cela présuppose que vous n'avez pas accès aux versions précédentes ni ne traite les autres implications du passage du C au C ++ pour la base de code.La création d'un compilateur écrit dans le même langage qu'il compile s'appelle bootstrapping . L'article de wikipedia décrit un certain nombre de façons de démarrer un compilateur.
Étant donné votre restriction selon laquelle vous ne disposez que d'un code source G ++ postérieur à la version 4.8 et pas de fichiers binaires prédéfinis pour votre plate-forme cible (aucun compilateur C ++ existant), l'amorçage du compilateur G ++ peut être effectué au moyen d' une compilation croisée .
Lors du démarrage d'un compilateur à l'aide de la compilation croisée, vous créez plusieurs versions de votre compilateur
Si vous n'avez pas non plus de PC (ou similaire) pour effectuer les étapes initiales, vous êtes en effet coincé, mais les chances d'être dans cette situation et d'essayer d'amorcer un compilateur sont négligeables.
la source