GCC-13.2.0

Introduction à GCC

Le paquet GCC contient la collection de compilateurs GNU. Cette page décrit l'installation des compilateurs pour les langages suivants : C, C++, D, Fortran, Objective C, Objective C++, Go et Modula2. Comme C et C++ ont été installés dans LFS, cette page permet soit de mettre à jour C et C++, soit d'installer des compilateurs supplémentaires.

[Note]

Note

Des langages supplémentaires, parmi lesquels D et Ada, sont disponibles dans la collection. D et Ada nécessitent un amorçage binaire à la première installation, donc leur installation n'est pas décrite ici. Pour les installer, vous pouvez procéder de la même manière que ci-dessous après l'installation du compilateur correspondant à partir d'un paquet binaire, en ajoutant ada ou d à la ligne --enable-languages.

This package is known to build and work properly using an LFS 12.0 platform.

[Attention]

Attention

Si vous mettez à jour depuis une version de GCC antérieure à 13.2.0, vous devez faire attention en compilant les modules externes au noyau. Vous devriez vous assurer que le noyau et tous ses modules natifs sont aussi compilés en utilisant la même version de GCC que celle utilisée pour construire les modules externes. Ce problème ne touche pas les mises à jour du noyau natif (et des modules du noyau), car les instructions ci-dessous sont une réinstallation complète de GCC. Si vous avez installé des modules externes, assurez-vous qu'ils soient recompilés en utilisant la version mise à jour de GCC. Comme toujours, ne mettez jamais à jour les en-têtes du noyau à partir de celles utilisées quand on a compilé Glibc dans LFS.

Informations sur le paquet

Dépendances de GCC

Facultatives

GDB-13.2, Valgrind-3.21.0 (pour les tests) et ISL (pour activer l'optimisation graphite)

Notes des rédacteurs : https://wiki.linuxfromscratch.org/blfs/wiki/gcc

Installation de GCC

[Important]

Important

Même si vous ne spécifiez que des langages autres que C et C++ à la commande ./configure ci-dessous, le processus d'installation écrasera les compilateurs C et C++ et les bibliothèques existantes de GCC. Il est recommandé de lancer la suite de tests complète.

Ne continuez pas avec la commande make install avant d'être sûr que la construction a réussi. Vous pouvez comparer vos résultats de tests avec ceux qui se trouvent sur https://gcc.gnu.org/ml/gcc-testresults/. Il se peut que vous vouliez également vous référer aux informations qui se trouvent dans la section GCC du chapitre 8 du livre LFS (../../../../lfs/view/12.0/chapter08/gcc.html).

Les instructions ci-dessous utilisent intentionnellement le processus « d'amorçage » (bootstrap). L'amorçage est utile pour la robustesse et est fortement recommandé pour la mise à jour des compilateurs. Pour le désactiver quand même, passez --disable-bootstrap dans les options de ./configure ci-dessous.

Installez GCC en exécutant les commandes suivantes :

case $(uname -m) in
  x86_64)
    sed -i.orig '/m64=/s/lib64/lib/' gcc/config/i386/t-linux64
  ;;
esac

mkdir build               &&
cd    build               &&

../configure              \
    --prefix=/usr         \
    --disable-multilib    \
    --with-system-zlib    \
    --enable-default-pie  \
    --enable-default-ssp  \
    --disable-fixincludes \
    --enable-languages=c,c++,fortran,go,objc,obj-c++,m2 &&
make

Si vous avez installé des paquets supplémentaires comme valgrind et gdb, la partie de la suite de tests qui traite de gcc lancera plus de tests que dans LFS. Certains d'entre eux signaleront des FAIL et d'autres XPASS (réussite alors qu'un échec était attendu). Pour gcc-13.2.0, environ 65 échecs auront lieu dans la suite « guality », ainsi que divers échecs tout le long du reste de la suite de tests. Si tous les compilateurs ci-dessus sont construits, il y a un peu plus de 80 échecs inattendus sur plus de 546 000 tests. Pour lancer les tests, lancez :

ulimit -s 32768 &&
make -k check

Les tests sont très longs, et les résultats peuvent être très difficiles à trouver dans les logs, en particulier si vous utilisez des travaux en parallèle avec make. Vous pouvez avoir un résumé des tests avec :

../contrib/test_summary

Maintenant, en tant qu'utilisateur root :

make install &&

mkdir -pv /usr/share/gdb/auto-load/usr/lib              &&
mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib &&

chown -v -R root:root \
    /usr/lib/gcc/*linux-gnu/13.2.0/include{,-fixed}

Explication des commandes

mkdir build; cd build : La documentation de GCC recommande de construire le paquet dans un répertoire de construction dédié.

--disable-multilib : Ce paramètre assure que les fichiers sont créés pour l'architecture spécifique à votre ordinateur.

--with-system-zlib : utilise la version système de zlib au lieu de la version fournie. zlib est utilisé pour compresser et décompresser les langages intermédiaires de GCC dans les fichiers objets LTO (Link Time Optimization).

--enable-default-pie : rend l'option -fpie active par défaut lors de la compilation des programmes. Avec la fonctionnalité ASLR activée dans le noyau, cela empêche certains types d'attaques basées sur la connaissance de la disposition de l'espace mémoire.

--enable-default-ssp : rend l'option -fstack-protector-strong active par défaut lors de la compilation des programmes. SSP est une technique qui évite l'altération du flot des programmes en corrompant la pile des paramètres.

--enable-languages=c,c++,fortran,go,objc,obj-c++,m2 : Cette commande identifie les langages à construire. Il se peut que vous modifiez cette commande pour supprimer des langages non désirés. GCC prend aussi en charge Ada et D, mais construire GCC avec Ada (ou D) nécessite un compilateur Ada (ou D). Ils ne sont donc pas activés ici.

ulimit -s 32768 : Cette commande empêche plusieurs scripts de tomber à court d'espace dans la pile.

make -k check : Cette commande lance une suite de tests sans s'arrêter si une erreur est rencontrée.

../contrib/test_summary : Cette commande produira un résumé des résultats de la suite de tests. Vous pouvez ajouter | grep -A7 Summ à la commande pour produire une version du résumé encore plus condensée. Il se peut que vous souhaitiez aussi rediriger la sortie vers un fichier pour visualiser et comparer à l'avenir.

mv -v /usr/lib/*gdb.py ... : Le processus d'installation met quelques fichiers utilisé par gdb dans le répertoire /usr/lib. Cela génère des messages d'erreur curieux quand ldconfig est utilisé. Cette commande déplace les fichiers à un autre endroit.

chown -v -R root:root /usr/lib/gcc/*linux-gnu/... : Si le paquet est construit par un utilisateur différent de root, le propriétaire du répertoire include installé sera incorrect. Ces commandes modifient l'appartenance vers l'utilisateur et le groupe root.

--enable-host-shared --enable-languages=jit : construit libgccjit, un bibliothèque pour intégrer GCC dans les programmes et les bibliothèque pour générer du code machine. Bien que « JIT » (just-in-time) apparaît dans le nom, la bibliothèque peut être utilisée pour la compilation AOT (ahead-of-time). --enable-host-shared est requis pour construire libgccjit, mais cela ralenti énormément GCC. Donc libgccjit devrait être construit et installé séparément, et non avec l'installation GCC « principale ». Si vous avez besoin de cette bibliothèque, configurez GCC avec ces deux options et installez la bibliothèque en exécutant make -C gcc jit.install-common jit.install-info en tant qu'utilisateur root. Cette bibliothèque n'est utilisée par aucun paquet de BLFS, ni testée par les développeurs de BLFS.

Contenu

Certains noms de programmes et de bibliothèques et des descriptions ne sont pas listés ici, mais peuvent être trouvé dans la section GCC de LFS puisqu'ils sont initialement installés dans LFS.

Programmes installés: gccgo, gfortran, gm2, go et gofmt, liés en dur à des noms spécifiques à l'architecture
Bibliothèques installées: libgfortran.{so,a}, libgm2.{so,a}, libgo.{so,a}, libgobegin.a, libgolibbegin.a, libobjc.{so,a} et de nombreuses autres bibliothèques et exécutables.
Répertoires installés: /usr/lib/go

Descriptions courtes

gccgo

est un compilateur basé sur GCC pour le langage Go

gm2

est un compilateur basé sur GCC pour le langage Modula-2

go

est un outil pour la gestion du code source Go

gofmt

est un outil pour le formatage du code source Go

gfortran

est un compilateur basé sur GCC pour le langage Fortran