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.
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++ et Go. 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.
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 11.3 platform.
Si vous mettez à jour depuis une version de GCC antérieure à 12.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.
Certains en-têtes système doivent être corrigés pour être
utilisés avec GCC. Cela se fait pendant l'installation de GCC et
les en-têtes « corrigés » sont installés dans
/usr/lib/gcc/<triplet
machine>/<version GCC>/include-fixed
. Cela est
sans danger si GCC est construit pendant la phase LFS. Mais si
vous réinstallez GCC dans BLFS, certains des paquets de BLFS
peuvent être « corrigés ». Si un de ces paquets est
réinstallé ensuite, les en-têtes « corrigés »
ne sont pas mis à jour, ce qui peut occasionner des incohérences
de version. Dans ce cas, les en-têtes « corrigés »
doivent être mis à jour en exécutant (en tant que root
) : /usr/libexec/gcc/x86_64-pc-linux-gnu/12.2.0/install-tools/mkheaders
. Le triplet de la machine peut être différent sur un système 32
bits.
Téléchargement (HTTP) : https://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.xz
Téléchargement (FTP) : ftp://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.xz
Somme de contrôle MD5 : 73bafd0af874439dcdb9fc063b6fb069
Taille du téléchargement : 81 Mo
Estimation de l'espace disque requis : 10,5 Go (2,4 Go installé avec tous les langages listés, plus 1,3 Go pour les tests)
Estimation du temps de construction : 32 SBU (plus 66 SBU pour les tests, tous deux avec parallélisme = 4)
GDB-13.1, Valgrind-3.20.0 (pour les tests) et ISL (pour activer l'optimisation graphite)
Notes utilisateur : https://wiki.linuxfromscratch.org/blfs/wiki/gcc
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/11.3/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 \ --enable-languages=c,c++,fortran,go,objc,obj-c++ && 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-12.2.0, environ 60 échecs auront lieu dans la suite « guality », ainsi que divers échecs tout le long du reste de la suite de tests, dont quinze sont déjà présents dans les tests de GCC dans LFS. Si tous les compilateurs ci-dessus sont construits, il y a environ 80 échecs inattendus sur plus de 482 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/12.2.0/include{,-fixed}
Quelques paquets veulent trouver le préprocesseur C dans
/lib
ou peuvent se référer au
compilateur C sous le nom de cc. Les liens symboliques
suivants ne sont pas utiles si vous avez suivi les instructions
LFS, puisqu'ils sont déjà créés. Si vous ne les avez pas sur votre
système, tapez en tant qu'utilisateur root
:
ln -v -sf ../usr/bin/cpp /lib && ln -v -sf gcc /usr/bin/cc && install -v -dm755 /usr/lib/bfd-plugins && ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/12.2.0/liblto_plugin.so /usr/lib/bfd-plugins/
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++
:
Cette commande identifie les langages à construire. Vous pouvez
changer cette commande pour retirer les langages dont vous ne
voulez pas. D'autres langages peuvent être ajoutés, dont ADA, D,
BRIG (ajoutez brig
à la
liste des langages disponibles), un format binaire pour HSAIL
(Langage Intermédiaire pour Architectures Système Hétérogènes) et
JIT (ajoutez jit
à la liste
des langages disponibles), une bibliothèque qui peut être liée à un
interpréteur qui souhaite générer du code machine « à la volée »
à l'exécution. Ils n'ont pas été testés par les développeurs de
BLFS.
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
.
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.