OSDN Git Service

Update to 3.8
[linuxjf/JF.git] / docs / LFS-BOOK / chapter06 / readjusting.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml">
4   <head>
5     <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
6     <title>
7       6.10. ツールチェーンの再調整
8     </title>
9     <link rel="stylesheet" href="../stylesheets/lfs.css" type="text/css" />
10     <meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
11     <link rel="stylesheet" href="../stylesheets/lfs-print.css" type=
12     "text/css" media="print" />
13   </head>
14   <body class="lfs" id="lfs-6.8">
15     <div class="navheader">
16       <h4>
17         Linux From Scratch - Version 6.8
18       </h4>
19       <h3>
20         第6章 基本的なソフトウェアのインストール
21       </h3>
22       <ul>
23         <li class="prev">
24           <a accesskey="p" href="glibc.html" title="Glibc-2.13">前のページ</a>
25           <p>
26             Glibc-2.13
27           </p>
28         </li>
29         <li class="next">
30           <a accesskey="n" href="zlib.html" title="Zlib-1.2.5">次のページ</a>
31           <p>
32             Zlib-1.2.5
33           </p>
34         </li>
35         <li class="up">
36           <a accesskey="u" href="chapter06.html" title=
37           "第6章 基本的なソフトウェアのインストール">上に戻る</a>
38         </li>
39         <li class="home">
40           <a accesskey="h" href="../index.html" title=
41           "Linux From Scratch - Version 6.8">ホーム</a>
42         </li>
43       </ul>
44     </div>
45     <div class="sect1" lang="ja" xml:lang="ja">
46       <h1 class="sect1">
47         <a id="ch-system-readjusting" name="ch-system-readjusting"></a>6.10.
48         ツールチェーンの再調整
49       </h1>
50       <p>
51         最終的な C ライブラリがこれまでに構築できました。 ここでツールチェーンの調整を再度行います。
52         これを行うことで、新たに生成したプログラムが新たに生成したライブラリにリンクされます。 この作業は <a class="xref"
53         href="../chapter05/chapter05.html" title="第5章 一時的環境の構築">第5章</a>
54         の冒頭にて行った「<span class="quote">調整</span>」作業と同様のことです。 ただし調整される方向が逆になります。
55         <a class="xref" href="../chapter05/chapter05.html" title=
56         "第5章 一時的環境の構築">第5章</a> では、ホストシステムの <code class=
57         "filename">/{,usr/}lib</code> ディレクトリを新しく作った <code class=
58         "filename">/tools/lib</code> ディレクトリに仕向けていました。 今度は同じ <code class=
59         "filename">/tools/lib</code> ディレクトリを LFS の <code class=
60         "filename">/{,usr/}lib</code> ディレクトリに向けます。
61       </p>
62       <p>
63         まず <code class="filename">/tools</code>
64         ディレクトリにあるリンカのバックアップをとっておき、第5章にて作成した調整済みリンカに置き換えます。 <code class=
65         "filename">/tools/$(gcc-dumpmachine)/bin</code>
66         ディレクトリにあるリンカに対してのシンボリックリンクも正しく生成しておきます。
67       </p>
68       <pre class="userinput">
69 <kbd class="command">mv -v /tools/bin/{ld,ld-old}
70 mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}
71 mv -v /tools/bin/{ld-new,ld}
72 ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld</kbd>
73 </pre>
74       <p>
75         次に GCC スペックファイルを修正し、新しいダイナミックリンカを指し示すようにします。 単純に 「<span class=
76         "quote">/tools</span>」 という記述を取り除けば、ダイナミックリンカへの正しい参照となります。
77         またスペックファイルを修正することで GCC がヘッダファイル、および Glibc の起動ファイルを適切に探し出せるようになります。
78         以下の <span class="command"><strong>sed</strong></span> によりこれを実現します。
79       </p>
80       <pre class="userinput">
81 <kbd class="command">gcc -dumpspecs | sed -e 's@/tools@@g' \
82     -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \
83     -e '/\*cpp:/{n;s@$@ -isystem /usr/include@}' &gt; \
84     `dirname $(gcc --print-libgcc-file-name)`/specs</kbd>
85 </pre>
86       <p>
87         スペックファイルの内容を実際に確認して、今変更した内容が正しく反映されていることを確認しておいてください。
88       </p>
89       <p>
90         この時点において、調整したツールチェーンの基本的な (コンパイルやリンクなどの) 機能が正しく動作していることを確認する必要があります。
91         これを行うために以下の健全性検査を実行します。
92       </p>
93       <pre class="userinput">
94 <kbd class="command">echo 'main(){}' &gt; dummy.c
95 cc dummy.c -v -Wl,--verbose &amp;&gt; dummy.log
96 readelf -l a.out | grep ': /lib'</kbd>
97 </pre>
98       <p>
99         問題なく動作した場合はエラーがなかったということで、最後のコマンドから出力される結果は以下のようになるはずです。
100         (ダイナミックリンカの名前はプラットフォームによって違っているかもしれません。)
101       </p>
102       <pre class="screen">
103 <code class=
104 "computeroutput">[Requesting program interpreter: /lib/ld-linux.so.2]</code>
105 </pre>
106       <p>
107         ダイナミックリンカのディレクトリは、今度は <code class="filename">/lib</code> となっているはずです。
108       </p>
109       <p>
110         ここで起動ファイルが正しく用いられていることを確認します。
111       </p>
112       <pre class="userinput">
113 <kbd class="command">grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log</kbd>
114 </pre>
115       <p>
116         問題なく動作した場合はエラーがなかったということで、上のコマンドの出力は以下のようになるはずです。
117       </p>
118       <pre class="screen">
119 <code class="computeroutput">/usr/lib/crt1.o succeeded
120 /usr/lib/crti.o succeeded
121 /usr/lib/crtn.o succeeded</code>
122 </pre>
123       <p>
124         コンパイラが正しいヘッダファイルを読み取っているかどうかを検査します。
125       </p>
126       <pre class="userinput">
127 <kbd class="command">grep -B1 '^ /usr/include' dummy.log</kbd>
128 </pre>
129       <p>
130         上のコマンドは正常に終了すると、以下の出力を返します。
131       </p>
132       <pre class="screen">
133 <code class="computeroutput">#include &lt;...&gt; search starts here:
134  /usr/include</code>
135 </pre>
136       <p>
137         次に、新たなリンカが正しいパスを検索して用いられているかどうかを検査します。
138       </p>
139       <pre class="userinput">
140 <kbd class="command">grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'</kbd>
141 </pre>
142       <p>
143         問題なく動作した場合はエラーがなかったということで、最後のコマンドの出力は以下のようになるはずです。
144         (作業するプラットフォームに応じて「<span class="quote">三つの組 (target
145         triplet)</span>」の表記は異なります。)
146       </p>
147       <pre class="screen">
148 <code class="computeroutput">SEARCH_DIR("/tools/i686-pc-linux-gnu/lib")
149 SEARCH_DIR("/usr/lib")
150 SEARCH_DIR("/lib");</code>
151 </pre>
152       <p>
153         次に libc が正しく用いられていることを確認します。
154       </p>
155       <pre class="userinput">
156 <kbd class="command">grep "/lib.*/libc.so.6 " dummy.log</kbd>
157 </pre>
158       <p>
159         問題なく動作した場合はエラーがなかったということで、最後のコマンドの出力は以下のようになるはずです。 (64 ビットマシンであれば
160         lib64 ディレクトリとなるはずです。)
161       </p>
162       <pre class="screen">
163 <code class="computeroutput">attempt to open /lib/libc.so.6 succeeded</code>
164 </pre>
165       <p>
166         最後に GCC が正しくダイナミックリンカを用いているかを確認します。
167       </p>
168       <pre class="userinput">
169 <kbd class="command">grep found dummy.log</kbd>
170 </pre>
171       <p>
172         問題なく動作した場合はエラーがなかったということで、上のコマンドの出力は以下のようになるはずです。
173         (ダイナミックリンカの名前はプラットフォームによって違っているかもしれません。 また 64 ビットマシンであれば lib64
174         ディレクトリとなるはずです。)
175       </p>
176       <pre class="screen">
177 <code class="computeroutput">found ld-linux.so.2 at /lib/ld-linux.so.2</code>
178 </pre>
179       <p>
180         出力結果が上と異なっていたり、出力が全く得られなかったりした場合は、何かが根本的に間違っているということです。
181         どこに問題があるのか調査・再試行を行って解消してください。 最もありがちな理由は、スペックファイルの修正を誤っていることです。
182         問題を残したままこの先には進まないでください。
183       </p>
184       <p>
185         すべてが正しく動作したら、テストに用いたファイルを削除します。
186       </p>
187       <pre class="userinput">
188 <kbd class="command">rm -v dummy.c a.out dummy.log</kbd>
189 </pre>
190     </div>
191     <div class="navfooter">
192       <ul>
193         <li class="prev">
194           <a accesskey="p" href="glibc.html" title="Glibc-2.13">前のページ</a>
195           <p>
196             Glibc-2.13
197           </p>
198         </li>
199         <li class="next">
200           <a accesskey="n" href="zlib.html" title="Zlib-1.2.5">次のページ</a>
201           <p>
202             Zlib-1.2.5
203           </p>
204         </li>
205         <li class="up">
206           <a accesskey="u" href="chapter06.html" title=
207           "第6章 基本的なソフトウェアのインストール">上に戻る</a>
208         </li>
209         <li class="home">
210           <a accesskey="h" href="../index.html" title=
211           "Linux From Scratch - Version 6.8">ホーム</a>
212         </li>
213       </ul>
214     </div>
215   </body>
216 </html>