Rev 1344 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
475 | gleu | 1 | <?xml version="1.0" encoding="ISO-8859-1"?> |
591 | gleu | 2 | <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
3 | "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ |
||
475 | gleu | 4 | <!ENTITY % general-entities SYSTEM "../general.ent"> |
5 | %general-entities; |
||
6 | ]> |
||
591 | gleu | 7 | |
475 | gleu | 8 | <sect1 id="ch-system-readjusting"> |
591 | gleu | 9 | <?dbhtml filename="readjusting.html"?> |
475 | gleu | 10 | |
1111 | jmengual | 11 | <title>Ré-ajustement de la chaîne d'outils</title> |
475 | gleu | 12 | |
591 | gleu | 13 | <para>Maintenant que les bibliothèques C finales ont été |
1111 | jmengual | 14 | installées, il est temps d'ajuster de nouveau la chaîne d'outils. L'ensemble |
591 | gleu | 15 | d'outils sera ajusté de façon à ce qu'il lie tout programme nouvellement |
16 | compilé avec ces nouvelles bibliothèques. C'est le même processus que celui |
||
17 | utilisé dans la phase d'<quote>ajustement</quote> au début du |
||
18 | <xref linkend="chapter-temporary-tools"/>, avec les ajustements inversés. Dans |
||
19 | <xref linkend="chapter-temporary-tools"/>, l'ensemble était passé des répertoires |
||
20 | <filename class="directory">/{,usr/}lib</filename> de l'hôte dans le nouveau |
||
21 | répertoire <filename class="directory">/tools/lib</filename>. Maintenant, |
||
22 | l'ensemble sera guidé du même répertoire <filename class="directory">/tools/lib</filename> |
||
23 | vers les répertoires <filename class="directory">/{,usr/}lib</filename>.</para> |
||
475 | gleu | 24 | |
667 | texou | 25 | <para>D'abord, sauvegardez l'éditeur de liens de |
591 | gleu | 26 | <filename class="directory">/tools</filename>, et remplacez-le par l'éditeur de |
27 | lien ajusté que nous avons fait au chapitre 5. Nous créerons aussi |
||
28 | un lien vers son équivalent dans |
||
29 | a <filename class="directory">/tools/$(gcc |
||
30 | -dumpmachine)/bin</filename> :</para> |
||
475 | gleu | 31 | |
591 | gleu | 32 | <screen><userinput>mv -v /tools/bin/{ld,ld-old} |
33 | mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old} |
||
34 | mv -v /tools/bin/{ld-new,ld} |
||
35 | ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld</userinput></screen> |
||
475 | gleu | 36 | |
591 | gleu | 37 | <para>Puis, modifiez le fichier des specs GCC afin qu'il pointe vers |
732 | texou | 38 | le nouvel éditeur de liens dynamiques. La suppression simple de tous les |
39 | exemples de <quote>/tools</quote> devrait nous laisser uniquement le bon |
||
40 | chemin sur l'éditeur de liens dynamique. Ajustez aussi le fichier de specs |
||
41 | pour que GCC sache où trouver les en-têtes corrects et les fichiers de |
||
42 | démarrage de Glibc. Une commande |
||
591 | gleu | 43 | <command>sed</command> fait cela :</para> |
475 | gleu | 44 | |
730 | texou | 45 | <screen><userinput>gcc -dumpspecs | sed -e 's@/tools@@g' \ |
591 | gleu | 46 | -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \ |
47 | -e '/\*cpp:/{n;s@$@ -isystem /usr/include@}' > \ |
||
48 | `dirname $(gcc --print-libgcc-file-name)`/specs</userinput></screen> |
||
475 | gleu | 49 | |
591 | gleu | 50 | <para>C'est une bonne idée d'examiner visuellement le fichier de specs |
51 | pour vérifier que le changement voulu a bien été effectué.</para> |
||
475 | gleu | 52 | |
591 | gleu | 53 | <para>Il est impératif à ce moment d'arrêter et de vous assurer que les |
54 | fonctions basiques (compilation et édition des liens) de l'ensemble des |
||
55 | outils ajusté fonctionnent comme attendu. Pour cela, réalisez une petite |
||
56 | vérification :</para> |
||
475 | gleu | 57 | |
591 | gleu | 58 | <screen os="a"><userinput>echo 'main(){}' > dummy.c |
59 | cc dummy.c -v -Wl,--verbose &> dummy.log |
||
60 | readelf -l a.out | grep ': /lib'</userinput></screen> |
||
475 | gleu | 61 | |
591 | gleu | 62 | <para os="b">Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs et |
63 | la sortie de la commande sera (avec des différences spécifiques aux plateformes |
||
64 | dans le nom de l'éditeur de liens) :</para> |
||
555 | gleu | 65 | |
591 | gleu | 66 | <screen os="c"><computeroutput>[Requesting program interpreter: /lib/ld-linux.so.2]</computeroutput></screen> |
475 | gleu | 67 | |
1080 | jmengual | 68 | <para>Remarquez que <filename class="directory">/lib</filename> est maintenant le |
591 | gleu | 69 | préfixe de notre éditeur de liens.</para> |
475 | gleu | 70 | |
591 | gleu | 71 | <para os="d">Maintenant, assurez-vous que nous utilisons les |
72 | bons fichiers de démarrage :</para> |
||
475 | gleu | 73 | |
591 | gleu | 74 | <screen os="e"><userinput>grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log</userinput></screen> |
475 | gleu | 75 | |
591 | gleu | 76 | <para os="f">Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs |
77 | et la sortie de la dernière commande sera :</para> |
||
475 | gleu | 78 | |
1347 | jmengual | 79 | <screen><computeroutput>/usr/lib/crti.o succeeded |
591 | gleu | 80 | /usr/lib/crtn.o succeeded</computeroutput></screen> |
475 | gleu | 81 | |
591 | gleu | 82 | <para os="g">Vérifiez que le compilateur cherche les bons fichiers |
83 | d'en-tête :</para> |
||
475 | gleu | 84 | |
591 | gleu | 85 | <screen><userinput>grep -B1 '^ /usr/include' dummy.log</userinput></screen> |
475 | gleu | 86 | |
591 | gleu | 87 | <para os="h">Cette commande devrait réussir avec la sortie suivante :</para> |
88 | |||
89 | <screen><computeroutput>#include <...> search starts here: |
||
90 | /usr/include</computeroutput></screen> |
||
91 | |||
92 | <para os="i">Puis, vérifiez que le nouvel éditeur de liens est utilisé |
||
93 | avec les bons chemins de recherche :</para> |
||
94 | |||
95 | <screen os="j"><userinput>grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'</userinput></screen> |
||
96 | |||
97 | <para os="k">Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs |
||
730 | texou | 98 | et la sortie de la dernière commande sera (selon la triplette cible |
99 | spécifique à chaque plateforme) :</para> |
||
591 | gleu | 100 | |
101 | <screen><computeroutput>SEARCH_DIR("/tools/i686-pc-linux-gnu/lib") |
||
102 | SEARCH_DIR("/usr/lib") |
||
103 | SEARCH_DIR("/lib");</computeroutput></screen> |
||
104 | |||
105 | <para os="l">Ensuite, assurez-vous que nous utilisons la bonne libc :</para> |
||
106 | |||
762 | texou | 107 | <screen os="m"><userinput>grep "/lib.*/libc.so.6 " dummy.log</userinput></screen> |
591 | gleu | 108 | |
109 | <para os="n">Si tout fonctionne correctement, il ne devrait pas y avoir d'erreur |
||
730 | texou | 110 | et la sortie de la dernière commande sera (selon la triplette cible |
111 | spécifique à chaque plateforme) :</para> |
||
591 | gleu | 112 | |
113 | <screen os="o"><computeroutput>attempt to open /lib/libc.so.6 succeeded</computeroutput></screen> |
||
114 | |||
115 | <para os="p">Pour finir, assurez-vous que GCC utilise le bon éditeur de liens dynamiques :</para> |
||
116 | |||
117 | <screen os="q"><userinput>grep found dummy.log</userinput></screen> |
||
118 | |||
119 | <para os="r">Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs et |
||
120 | la sortie de la commande sera (avec des différences spécifiques aux plateformes |
||
730 | texou | 121 | dans le nom de l'éditeur de liens et un répertoire lib64 sur les hôtes |
122 | 64 bits) :</para> |
||
591 | gleu | 123 | |
124 | <screen os="s"><computeroutput>found ld-linux.so.2 at /lib/ld-linux.so.2</computeroutput></screen> |
||
125 | |||
126 | <para os="t">Si la sortie n'apparaît pas comme montré ci-dessus ou |
||
127 | qu'elle n'apparaît pas du tout, alors quelque chose ne va vraiment pas. |
||
667 | texou | 128 | Enquêtez et retracez les étapes pour savoir d'où vient le problème et comment le |
591 | gleu | 129 | corriger. La raison la plus probable est que quelque chose s'est mal passé lors |
130 | de la modification du fichier specs ci-dessus. Tout problème devra être résolu |
||
131 | avant de continuer le processus.</para> |
||
132 | |||
133 | <para os="u">Une fois que tout fonctionne correctement, nettoyez les fichiers |
||
134 | tests :</para> |
||
135 | |||
136 | <screen os="v"><userinput>rm -v dummy.c a.out dummy.log</userinput></screen> |
||
137 | |||
475 | gleu | 138 | </sect1> |