Maintenant que les bibliothèques C temporaires ont été installées, tous les outils compilés dans le reste de ce chapitre doivent être liés avec ces bibliothèques. Pour accomplir cela, l'éditeur de liens et le fichier specs du compilateur doivent être ajustés.
L'éditeur de liens ajusté (à la fin de la première passe de Binutils)
doit être déplacé afin d'être trouvé et utilisé convenablement.
D'abord, sauvegardez l'éditeur de liens original puis remplacez-le
par celui qui a été ajusté. Nous créerons aussi un lien pour son
équivalent dans /tools/$(gcc
-dumpmachine)/bin
:
mv -v /tools/bin/{ld,ld-old} mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old} mv -v /tools/bin/{ld-new,ld} ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld
À partir de ce moment, tout sera lié uniquement avec les
bibliothèques comprises dans /tools/lib
.
La prochaine tâche est de modifier le fichier specs de GCC pour qu'il pointe vers le nouvel éditeur de liens. Ceci se fait en plaçant le fichier « specs » de GCC à un endroit où GCC va le chercher par défaut. Un simple script sed modifie alors l'éditeur de liens dynamique que GCC utilisera.
Par souci de précision, il est recommandé que la commande suivante soit copiée/collée. Assurez-vous d'inspecter visuellement le fichier specs pour vérifier que toutes les occurrences de « /lib/ld-linux.so.2 » ont été remplacées par « /tools/lib/ld-linux.so.2 » :
Au cas où le nom de l'éditeur de liens de la plateforme de travail
est autre que ld-linux.so.2
,
remplacez « ld-linux.so.2 »
par le nom de l'éditeur de liens de votre plateforme dans les
commandes ci-dessus. Référez-vous à Section 5.2,
« Notes techniques sur l'ensemble d'outils, » si
nécessaire
gcc -dumpspecs | sed 's@^/lib/ld-linux.so.2@/tools&@g' \ > `dirname $(gcc -print-libgcc-file-name)`/specs
Pendant la procédure de construction, GCC exécute un script (fixincludes) qui parcourt le système pour déterminer les fichiers d'en-tête qui pourraient nécessiter une réparation (ils pourraient contenir des erreurs de syntaxe, par exemple), et qui installe les versions corrigées dans un répertoire include autonome. Il se peut que, au terme de ce processus, certains fichiers d'en-tête du système hôte se trouvent placés dans le répertoire autonome include de GCC. Comme le reste de ce chapitre n'exige que les en-têtes de GCC et de Glibc, qui ont désormais été installées, toute en-tête « corrigée » peut être supprimée en toute sécurité. Cela permet d'éviter toute pollution de l'environnement de construction par les en-têtes du système hôte. Lancez les commandes suivantes pour supprimer les fichiers d'en-tête dans le répertoire autonome include de GCC (il se peut que vous trouviez plus facile de copier-coller les commandes plutôt que de les saisir à la main, du fait de leur longueur) :
GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include && find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rvf '{}' \; && rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` && unset GCC_INCLUDEDIR
Il est impératif à ce moment de s'arrêter et de s'assurer que les fonctions basiques (compilation et édition des liens) du nouvel ensemble d'outils fonctionnent comme attendu. Pour réaliser une vérification de propreté, lancez les commandes suivantes :
echo 'main(){}' > dummy.c cc dummy.c readelf -l a.out | grep ': /tools'
Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs et la sortie de la dernière commande sera de la forme :
[Requesting program interpreter:
/tools/lib/ld-linux.so.2]
Notez que /tools/lib
apparaît comme
préfixe de l'éditeur de liens dynamique.
Si l'affichage diffère ou s'il n'y a aucun affichage, alors quelque
chose ne se passe pas bien. Enquêtez et tracez vos étapes pour
trouver où se cache le problème et comment le corriger. Ce problème
doit être corrigé avant de continuer. Tout d'abord, relancez la
vérification de propreté en utilisant gcc au lieu de cc. Si cela fonctionne, le lien
symbolique /tools/bin/cc
est
manquant. Lisez de nouveau Section 5.4,
« GCC-4.1.2 - Passe 1, » et installez le lien
symbolique. Ensuite, assurez-vous que le PATH
est correct. Ceci se vérifie en lançant
echo $PATH et en
vérifiant que /tools/bin
est en tête
de la liste. Si le PATH
est mauvais,
cela pourrait signifier que vous n'êtes pas connecté en tant
qu'utilisateur lfs
ou que quelque
chose s'est mal passé dans Section 4.4,
« Configurer l'environnement. ». Une autre
possibilité est que quelque chose a pu mal se passer avec la
correction du fichier specs ci-dessus. Dans ce cas, refaites la
modification de ce fichier en vous assurant de copier/coller les
commandes.
Une fois que tout va bien, nettoyez les fichiers de test ::
rm -v dummy.c a.out
Construire TCL dans la prochaine section servira comme vérification supplémentaire de la bonne mise en place de l'outil de construction. Si TCL échoue à la construction, c'est une indication d'un problème avec l'installation de Binutils, GCC ou Glibc, mais pas avec TCL lui-même.