5.7. Ajuster l'ensemble d'outils

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

[Important]

Important

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
[Attention]

Attention

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
[Note]

Note

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.