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">
5 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
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" />
14 <body class="lfs" id="lfs-6.8">
15 <div class="navheader">
17 Linux From Scratch - Version 6.8
24 <a accesskey="p" href="glibc.html" title="Glibc-2.13">前のページ</a>
30 <a accesskey="n" href="zlib.html" title="Zlib-1.2.5">次のページ</a>
36 <a accesskey="u" href="chapter06.html" title=
37 "第6章 基本的なソフトウェアのインストール">上に戻る</a>
40 <a accesskey="h" href="../index.html" title=
41 "Linux From Scratch - Version 6.8">ホーム</a>
45 <div class="sect1" lang="ja" xml:lang="ja">
47 <a id="ch-system-readjusting" name="ch-system-readjusting"></a>6.10.
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> ディレクトリに向けます。
63 まず <code class="filename">/tools</code>
64 ディレクトリにあるリンカのバックアップをとっておき、第5章にて作成した調整済みリンカに置き換えます。 <code class=
65 "filename">/tools/$(gcc-dumpmachine)/bin</code>
66 ディレクトリにあるリンカに対してのシンボリックリンクも正しく生成しておきます。
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>
75 次に GCC スペックファイルを修正し、新しいダイナミックリンカを指し示すようにします。 単純に 「<span class=
76 "quote">/tools</span>」 という記述を取り除けば、ダイナミックリンカへの正しい参照となります。
77 またスペックファイルを修正することで GCC がヘッダファイル、および Glibc の起動ファイルを適切に探し出せるようになります。
78 以下の <span class="command"><strong>sed</strong></span> によりこれを実現します。
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@}' > \
84 `dirname $(gcc --print-libgcc-file-name)`/specs</kbd>
87 スペックファイルの内容を実際に確認して、今変更した内容が正しく反映されていることを確認しておいてください。
90 この時点において、調整したツールチェーンの基本的な (コンパイルやリンクなどの) 機能が正しく動作していることを確認する必要があります。
91 これを行うために以下の健全性検査を実行します。
93 <pre class="userinput">
94 <kbd class="command">echo 'main(){}' > dummy.c
95 cc dummy.c -v -Wl,--verbose &> dummy.log
96 readelf -l a.out | grep ': /lib'</kbd>
99 問題なく動作した場合はエラーがなかったということで、最後のコマンドから出力される結果は以下のようになるはずです。
100 (ダイナミックリンカの名前はプラットフォームによって違っているかもしれません。)
104 "computeroutput">[Requesting program interpreter: /lib/ld-linux.so.2]</code>
107 ダイナミックリンカのディレクトリは、今度は <code class="filename">/lib</code> となっているはずです。
110 ここで起動ファイルが正しく用いられていることを確認します。
112 <pre class="userinput">
113 <kbd class="command">grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log</kbd>
116 問題なく動作した場合はエラーがなかったということで、上のコマンドの出力は以下のようになるはずです。
119 <code class="computeroutput">/usr/lib/crt1.o succeeded
120 /usr/lib/crti.o succeeded
121 /usr/lib/crtn.o succeeded</code>
124 コンパイラが正しいヘッダファイルを読み取っているかどうかを検査します。
126 <pre class="userinput">
127 <kbd class="command">grep -B1 '^ /usr/include' dummy.log</kbd>
130 上のコマンドは正常に終了すると、以下の出力を返します。
133 <code class="computeroutput">#include <...> search starts here:
137 次に、新たなリンカが正しいパスを検索して用いられているかどうかを検査します。
139 <pre class="userinput">
140 <kbd class="command">grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'</kbd>
143 問題なく動作した場合はエラーがなかったということで、最後のコマンドの出力は以下のようになるはずです。
144 (作業するプラットフォームに応じて「<span class="quote">三つの組 (target
145 triplet)</span>」の表記は異なります。)
148 <code class="computeroutput">SEARCH_DIR("/tools/i686-pc-linux-gnu/lib")
149 SEARCH_DIR("/usr/lib")
150 SEARCH_DIR("/lib");</code>
153 次に libc が正しく用いられていることを確認します。
155 <pre class="userinput">
156 <kbd class="command">grep "/lib.*/libc.so.6 " dummy.log</kbd>
159 問題なく動作した場合はエラーがなかったということで、最後のコマンドの出力は以下のようになるはずです。 (64 ビットマシンであれば
160 lib64 ディレクトリとなるはずです。)
163 <code class="computeroutput">attempt to open /lib/libc.so.6 succeeded</code>
166 最後に GCC が正しくダイナミックリンカを用いているかを確認します。
168 <pre class="userinput">
169 <kbd class="command">grep found dummy.log</kbd>
172 問題なく動作した場合はエラーがなかったということで、上のコマンドの出力は以下のようになるはずです。
173 (ダイナミックリンカの名前はプラットフォームによって違っているかもしれません。 また 64 ビットマシンであれば lib64
177 <code class="computeroutput">found ld-linux.so.2 at /lib/ld-linux.so.2</code>
180 出力結果が上と異なっていたり、出力が全く得られなかったりした場合は、何かが根本的に間違っているということです。
181 どこに問題があるのか調査・再試行を行って解消してください。 最もありがちな理由は、スペックファイルの修正を誤っていることです。
182 問題を残したままこの先には進まないでください。
185 すべてが正しく動作したら、テストに用いたファイルを削除します。
187 <pre class="userinput">
188 <kbd class="command">rm -v dummy.c a.out dummy.log</kbd>
191 <div class="navfooter">
194 <a accesskey="p" href="glibc.html" title="Glibc-2.13">前のページ</a>
200 <a accesskey="n" href="zlib.html" title="Zlib-1.2.5">次のページ</a>
206 <a accesskey="u" href="chapter06.html" title=
207 "第6章 基本的なソフトウェアのインストール">上に戻る</a>
210 <a accesskey="h" href="../index.html" title=
211 "Linux From Scratch - Version 6.8">ホーム</a>