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
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
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
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
|