10.18. GCC-7.1.0

Le paquet GCC contient la collection de compilateurs GNU, qui contient les compilateurs C et C++.

10.18.1. Installation de GCC

Appliquez le correctif suivant pour que GCC se lie à /lib au lieu de /lib64 :

patch -Np1 -i ../gcc-7.1.0-pure64-1.patch

Appliquez un sed qui supprimera l'exécution du script fixincludes :

sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in

La documentation de GCC recommande de construire GCC en dehors du répertoire des sources dans un répertoire dédié :

mkdir -v ../gcc-build
cd ../gcc-build

Préparez la compilation de GCC :

SED=sed CC="gcc -isystem /usr/include" \
CXX="g++ -isystem /usr/include" \
LDFLAGS="-Wl,-rpath-link,/usr/lib:/lib" \
../gcc-7.1.0/configure \
    --prefix=/usr \
    --libexecdir=/usr/lib \
    --enable-languages=c,c++ \
    --disable-multilib \
    --with-system-zlib \
    --enable-install-libiberty \
    --disable-bootstrap

Voici la signification des nouvelles options de configure :

SED=sed

Cela évite qu'un chemin ne soit codé en dur vers /tools/bin/sed dans le programme fixincl.

--disable-bootstrap

Pour une construction native, GCC effectue par défaut un « bootstrap » en trois étapes du compilateur. Cela signifie que GCC est compilé trois fois - il est compilé une fois, le compilateur de la première étape est utilisé pour le reconstruire, et celui de la deuxième étape est utilisé pour le reconstruire de nouveau. Le second et troisième compilateur sont comparés, pour vérifier que GCC est capable de se reproduire correctement. Cependant, il n'y a pas besoin de cela pour le processus de construction de CLFS donc nous le désactivons ici.

Compilez le paquet :

make
[Important]

Important

À cause du rôle critique que joue GCC dans un système fonctionnel, les développeurs de CLFS recommandent fortement de lancer la suite de tests.

Augmentez la taille de la pile avant de lancer les tests :

ulimit -s 32768

Testez les résultats, mais ne vous arrêtez pas aux erreurs :

make -k check

Le drapeau -k est utilisé pour que la suite de tests continue jusqu'à la fin et ne s'arrête pas au premier échec. La suite de tests de GCC est très complète et est presque garantie de générer quelques erreurs. Pour récupérer un résumé des résultats de la suite de tests, lancez :

../gcc-7.1.0/contrib/test_summary

Pour le résumé uniquement, passez la sortie à travers grep -A7 Summ.

De rares échec inattendus ne peuvent pas toujours être évités. Les développeurs de GCC sont souvent au courant de ces problèmes, mais ne les ont pas encore résolus.

Installez le paquet :

make install

Créez un lien pour satisfaire la FHS :

ln -sv ../usr/bin/cpp /lib

Plusieurs paquets utilisent le nom cc pour appeler le compilateur C. Pour les satisfaire, créez un lien symbolique :

ln -sv gcc /usr/bin/cc

Enfin, déplacez un fichier mal placé :

mv -v /usr/lib/libstdc++*gdb.py /usr/share/gdb/auto-load/usr/lib

10.18.2. Contenu de GCC

Programmes installés: c++, cc (lien vers gcc), cpp, g++, gcc, gcov, gcov-tool
Bibliothèques installées: libasan.[a,so], libatomic.[a,so], libcc1.so, libcilkrts.[a,so], libgcc.a, libgcc_eh.a, libgcc_s.so, libgcov.a, libgomp.[a,so], libiberty.a, libitm.[a,so], liblsan.[a,so], liblto_plugin.so, libquadmath.[a,so], libssp.[a,so], libssp_nonshared.a, libstdc++.[a,so], libsupc++.a, libtsan.[a,so], libubsan.[a,so], libvtv.[a,so]
Répertoires installés: /usr/include/[c++,libiberty], /usr/lib/gcc, /usr/share/gcc-7.1.0

Descriptions courtes

cc

Le compilateur C

cpp

Le préprocesseur C ; il est utilisé par le compilateur pour étendre les #include, #define et instructions similaires dans les fichiers source.

c++

Le compilateur C++

g++

Le compilateur C++

gcc

Le compilateur C

gcov

Un outil de couverture de tests ; il est utilisé pour analyser les programmes et déterminer où les optimisations auront le plus d'effet.

gcov-tool

Un outil hor-ligne pour gérer les compteurs gcda

libasan

La bibliothèque à l'exécution de nettoyage d'addresses

libatomic

Une bibliothèque à l'exécution de support de GCC pour les opérations atomiques qui ne sont pas supportées par le matériel

libcc1

Traduit une API en appels RPC

libcilkrts

Bibliothèque à l'exécution pour Intl® Cilk™ Plus

libgcc

Contient le support à l'exécution pour gcc

libgcov

Bibliothèque qui est liée dans le programme lorsqu'on demande à gcc d'activer le profilage

libgomp

Implémentation GNU de l'API OpenMP pour la programmation multi-plateforme à mémoire partagée et parallèle en C/C++ et Fortran

libiberty

Contient les routines utilisées par divers programmes GNU, dont getopt, obstack, strerror, strtol et strtoul

libitm

La bibliothèque de mémoire transactionnelle GNU, qui fournit le support des transaction pour les acces à la mémoire d'un processus

liblsan

La bibliothèque à l'exécution de nettoyage de fuites

liblto_plugin

Bibliothèque à l'exécution pour le greffon d'optimisation à l'édition de lien de GCC

libquadmath

L'API de la bibliothèque de math à quadruple précision de GCC

libssp

Contient les routines de support des fonctionnalités de protection contre l'écrasement de pile de GCC

libstdc++

La bibliothèque C++ standard

libsupc++

Fourni les routines de support du langage de programmation C++

libtsan

La bibliothèque à l'exécution de nettoyage de thread

libubsan

La bibliothèque à l'exécution de nettoyage de comportement indéfini

libvtv

La bibliothèque à l'exécution de vérification de la table virtuelle