Estimation du temps de construction: 22 minutes Estimation de l'espace disque requis: 168 MB |
Avant que GCC ne soit installé, il faut que le fichier patch de GCC soit déballé. Assurez-vous qu'il soit déballé avant de lancer les commandes d'installation.
Ce package est connu pour se comporter bizarrement si vous avez changé les options d'optimisation par défaut (y compris les options -march et -mcpu). GCC se comporte mieux sans. Donc, si vous avez défini des variables d'environnement qui écrasent les optimisations par défaut, comme CFLAGS et CXXFLAGS, nous vous recommendons de les annuler ou de les modifier lors de la construction de GCC. Vous avez été prévenu.
Installez GCC en lançant les commandes suivantes:
patch -Np1 -i ../gcc-2.95.3-2.patch && mkdir ../gcc-build && cd ../gcc-build && ../gcc-2.95.3/configure --prefix=/usr --enable-languages=c,c++ \ --disable-nls --disable-shared --enable-threads=posix && make BOOT_LDFLAGS=-static bootstrap && make prefix=$LFS/usr install && ln -sf ../usr/bin/cpp $LFS/lib && ln -sf ../bin/cpp $LFS/usr/lib && ln -sf gcc $LFS/usr/bin/cc && rmdir $LFS/usr/*-gnu/include && rmdir $LFS/usr/*-gnu |
patch -Np1 -i ../gcc-2.95.3-2.patch: Ce nouveau patch traite la gestion incorrecte des symboles faibles, la sur-optimisation des appels vers ces symboles, un problème sur atexit et le symbole __dso_handle requis pour la fonction propre de atexit.
make BOOT_LDFLAGS=-static: Ceci est l'équivalent de LDFLAGS=-static que nous utilisons avec d'autres packages pour les compiler statiquement.
--prefix=/usr: Ce n'est PAS une erreur de frappe. GCC garde en dur certains chemins lors de la compilation et nous devons donc donner /usr lors du ./configure. Nous donnons le vrai préfixe du chemin d'installation plus tard lors de la commande make install.
--enable-languages=c,c++: Ceci ne crée que les compilateurs C et C++, et pas les autres compilateurs disponibles, parce qu'ils sont en moyenne très peu utilisés. Si certains de ces autres compilateurs sont nécessaires, le paramètre --enable-languages peut être omis.
--enable-threads=posix: Ceci permet la gestion des exceptions C++ pour le code multithread.
ln -sf ../usr/bin/cpp: Ceci crée le lien symbolique $LFS/lib/cpp. Certains packages essaient explicitement de trouver cpp dans /lib.
ln -sf ../bin/cpp: Ceci crée le lien symbolique $LFS/usr/lib/cpp, parce qu'il y a des packages qui s'attendent à ce que cpp soit dans /usr/lib.
rmdir $LFS/usr/*-gnu/include et rmdir $LFS/usr/*-gnu: Ces répertoires sont créés vide par GCC et ne servent strictement à rien. Leur utilité principale concerne la cross-compilation mais ceci ne s'applique pas à nous. Ceci est considéré comme un bug de GCC car vous n'avez aucun moyen de le désactiver. Donc nous les supprimons manuellement.
c++, c++filt, cc (lien vers gcc), cc1, cc1plus, collect2, cpp, cpp0, g++, gcc, gcov, protoize et unprotoize
Ce sont les compilateurs C. Un compilateur transforme le code source au format texte dans un format que l'ordinateur comprends. Après qu'un code source ait été compilé en un fichier objet, un éditeur de lien va créer un fichier exécutable à partir d'un ou plusieurs de ces fichiers généré par le compilateur.
Ce sont les compilateurs C++; l'équivalent de cc et gcc, etc...
c++filt est utilisé pour filtrer les symboles C++.
collect2 assiste à la compilation de constructeurs.
cpp réalise un travail préliminaire sur un fichier source, comme inclure le contenu des fichiers d'entêtes dans ce code source. C'est une bonne idée de ne pas faire ceci manuellement pour gagner beaucoup de temps. Il suffit d'insérer une ligne comme #include <filename>. Ce préprocesseur insère le contenu de ce fichier dans le fichier source. C'est une des choses que réalise le préprocesseur.
gcov analyse les programmes pour aider à créer des codes plus efficaces, plus rapides avec une optimisation.
Programme optionnel qui transforme des fonctions ou des définitions pre-ANSI dans le nouveau style des prototypes C ANSI (fichier par défaut à rechercher est /usr/lib/gcc-lib/<arch>/<version>/SYSCALLS.c.X)
Programme optionnel qui transforme des prototypes réalisés avec protoize vers l'ancien style pre-ANSI (job correct seulement quand conversion avant protoize)
libgcc.a, libiberty.a, libstdc++.[a,so]
libgcc.a est une bibliothèque utilisé par gcc lors de son exécution. La plupart du temps, sur la pluport des machines, libgcc.a n'est pas réellement nécessaire.
libiberty est une collection de sous-routines utilisées par différents programmmes GNU, comme getopt, obstack, strerror, strtol et strtoul.
libstdc++ est la bibliothèque C++. Elle est utilisée par les programmes C++ et contient des fonctions couramment utilisé par eux. De cette façon, le développeur n'a pas besoin d'écrire certaines fonctions (comme écrire une ligne de texte à l'écran) à partir de rien, à chaque fois qu'il crée un programme.
GCC-2.95.3 nécessite que les programmes suivants soient installés:
bash: sh
binutils: ar, as, ld, nm, ranlib
diffutils: cmp
fileutils: chmod, cp, ln, ls, mkdir, mv, rm, touch
find: find
gcc: cc, cc1, collect2, cpp0, gcc
grep: egrep, grep
make: make
patch: patch
sed: sed
sh-utils: basename, dirname, echo, expr, hostname, sleep, true, uname
tar: tar
texinfo: install-info, makeinfo
textutils: cat, tail, tr