Subversion Repositories svn LFS-FR

Rev

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>&nbsp;:</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>&nbsp;:</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&amp;@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)&nbsp;:</para>

<!-- && used to ease copy and pasting -->
<screen><userinput>GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include &amp;&amp;
find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rvf '{}' \; &amp;&amp;
rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` &amp;&amp;
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&nbsp;:</para>

<screen><userinput>echo 'main(){}' &gt; 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&nbsp;:</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&nbsp;::</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>