Rev 670 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-tools-adjusting">
<?dbhtml filename="adjusting.html"?>
<title>Ajuster l'ensemble d'outils</title>
<para>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.</para>
<para>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
<filename class="directory">/tools/$(gcc -dumpmachine)/bin</filename> :</para>
<screen><userinput>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</userinput></screen>
<para>À partir de ce moment, tout sera lié uniquement avec les bibliothèques
comprises dans <filename class="directory">/tools/lib</filename>.</para>
<para>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
<quote>specs</quote> de GCC à un endroit où GCC va le chercher par défaut.
Un simple script <command>sed</command> modifie alors l'éditeur de liens
dynamique que GCC utilisera.</para>
<para>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 <quote>/lib/ld-linux.so.2</quote> ont
été remplacées par <quote>/tools/lib/ld-linux.so.2</quote> :</para>
<important>
<para>Au cas où le nom de l'éditeur de liens de la plateforme de
travail est autre que <filename class="libraryfile">ld-linux.so.2</filename>,
remplacez <quote>ld-linux.so.2</quote> par le nom de l'éditeur de liens de
votre plateforme dans les commandes ci-dessus. Référez-vous à
<xref linkend="ch-tools-toolchaintechnotes" role=","/> si
nécessaire</para>
</important>
<!-- Ampersands are needed to allow copy and paste -->
<screen><userinput>gcc -dumpspecs | sed 's@^/lib/ld-linux.so.2@/tools&@g' \
> `dirname $(gcc -print-libgcc-file-name)`/specs</userinput></screen>
<para>Pendant la procédure de construction, GCC exécute un script
(<command>fixincludes</command>) 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 <quote>corrigée</quote> 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) :</para>
<!-- && used to ease copy and pasting -->
<screen><userinput>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</userinput></screen>
<caution>
<para>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 :</para>
<screen><userinput>echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'</userinput></screen>
<para>Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs et
la sortie de la dernière commande sera de la forme :</para>
<screen><computeroutput>[Requesting program interpreter:
/tools/lib/ld-linux.so.2]</computeroutput></screen>
<para>Notez que <filename class="directory">/tools/lib</filename>
apparaît comme préfixe de l'éditeur de liens dynamique.</para>
<para>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
<command>gcc</command> au lieu de <command>cc</command>. Si cela fonctionne,
le lien symbolique <filename class="symlink">/tools/bin/cc</filename> est
manquant. Lisez de nouveau <xref linkend="ch-tools-gcc-pass1" role=","/> et
installez le lien symbolique.
Ensuite, assurez-vous que le <envar>PATH</envar> est correct. Ceci se
vérifie en lançant <command>echo $PATH</command> et en vérifiant que
<filename class="directory">/tools/bin</filename> est en tête de la
liste. Si le <envar>PATH</envar> est mauvais, cela pourrait signifier
que vous n'êtes pas connecté en tant qu'utilisateur
<systemitem class="username">lfs</systemitem> ou que quelque chose s'est mal passé dans
<xref linkend="ch-tools-settingenviron" role="."/>. 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.</para>
<para>Une fois que tout va bien, nettoyez les fichiers de test ::</para>
<screen><userinput>rm -v dummy.c a.out</userinput></screen>
</caution>
<note><para>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.</para></note>
</sect1>