OSDN Git Service

Update to lfsbook 7.2.ja
[linuxjf/JF.git] / docs / LFS-BOOK / chapter05 / glibc.html
index 6064547..392bf46 100644 (file)
@@ -4,17 +4,17 @@
   <head>
     <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
     <title>
-      5.7. Glibc-2.13
+      5.7. Glibc-2.16.0
     </title>
     <link rel="stylesheet" href="../stylesheets/lfs.css" type="text/css" />
     <meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
     <link rel="stylesheet" href="../stylesheets/lfs-print.css" type=
     "text/css" media="print" />
   </head>
-  <body class="lfs" id="lfs-6.8">
+  <body class="lfs" id="lfs-7.2">
     <div class="navheader">
       <h4>
-        Linux From Scratch - Version 6.8
+        Linux From Scratch - Version 7.2
       </h4>
       <h3>
         第5章 一時的環境の構築
       <ul>
         <li class="prev">
           <a accesskey="p" href="linux-headers.html" title=
-          "Linux-2.6.37 API ヘッダ">前のページ</a>
+          "Linux-3.5.2 API ヘッダー">前のページ</a>
           <p>
-            Linux-2.6.37 API ヘッダ
+            Linux-3.5.2 API ヘッダー
           </p>
         </li>
         <li class="next">
-          <a accesskey="n" href="adjusting.html" title="ツールチェーンの調整">次のページ</a>
+          <a accesskey="n" href="binutils-pass2.html" title=
+          "Binutils-2.22 - 2回め">次のページ</a>
           <p>
-            ツールチェーンの調整
+            Binutils-2.22 - 2回め
           </p>
         </li>
         <li class="up">
         </li>
         <li class="home">
           <a accesskey="h" href="../index.html" title=
-          "Linux From Scratch - Version 6.8">ホーム</a>
+          "Linux From Scratch - Version 7.2">ホーム</a>
         </li>
       </ul>
     </div>
     <div class="wrap" lang="ja" xml:lang="ja">
       <h1 class="sect1">
-        <a id="ch-tools-glibc" name="ch-tools-glibc"></a>5.7. Glibc-2.13
+        <a id="ch-tools-glibc" name="ch-tools-glibc"></a>5.7. Glibc-2.16.0
       </h1>
       <div class="package" lang="ja" xml:lang="ja">
         <p>
           Glibc パッケージは主要な C ライブラリを提供します。
-          ã\81\93ã\81®ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\81¯å\9fºæ\9c¬ç\9a\84ã\81ªå\87¦ç\90\86ã\83«ã\83¼ã\83\81ã\83³ã\82\92å\90«ã\82\80ã\82\82ã\81®ã\81§ã\80\81ã\83¡ã\83¢ã\83ªå\89²ã\82\8aå½\93ã\81¦ã\80\81ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªèµ°æ\9f»ã\80\81ã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\82ªã\83¼ã\83\97ã\83³ã\83»クローズや入出力、文字列操作、パターンマッチング、算術処理、等々があります。
+          ã\81\93ã\81®ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\81¯å\9fºæ\9c¬ç\9a\84ã\81ªå\87¦ç\90\86ã\83«ã\83¼ã\83\81ã\83³ã\82\92å\90«ã\82\80ã\82\82ã\81®ã\81§ã\80\81ã\83¡ã\83¢ã\83ªå\89²ã\82\8aå½\93ã\81¦ã\80\81ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªèµ°æ\9f»ã\80\81ã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\82ªã\83¼ã\83\97ã\83³ã\80\81クローズや入出力、文字列操作、パターンマッチング、算術処理、等々があります。
         </p>
         <div class="segmentedlist">
           <div class="seglistitem">
             <div class="seg">
               <strong class="segtitle">概算ビルド時間:</strong> <span class=
-              "segbody">6.9 SBU</span>
+              "segbody">5.4 SBU</span>
             </div>
             <div class="seg">
               <strong class="segtitle">必要ディスク容量:</strong> <span class=
-              "segbody">371 MB</span>
+              "segbody">554 MB</span>
             </div>
           </div>
         </div>
           5.7.1. Glibc のインストール
         </h2>
         <p>
-          Glibc が GCC-4.5.2 に対してビルドできなくなるバグを修正します。
+          例えば LFS 7.1 などにおいて、rpc ヘッダーが適切にインストールされていない場合があります。
+          ホストシステムにそれらがインストールされているかを確認し、なければそれらをインストールするようにします。
         </p>
         <pre class="userinput">
-<kbd class="command">patch -Np1 -i ../glibc-2.13-gcc_fix-1.patch</kbd>
+<kbd class="command">if [ ! -r /usr/include/rpc/types.h ]; then
+  su -c 'mkdir -p /usr/include/rpc'
+  su -c 'cp -v sunrpc/rpc/*.h /usr/include/rpc'
+fi</kbd>
 </pre>
         <p>
-          Glibc のドキュメントでは、ソースディレクトリ以外の専用のビルドディレクトリを作成することが推奨されています。
+          Glibc-2.16.0 を GCC-4.7.1 にてビルドする際の問題を以下により解消します。
         </p>
         <pre class="userinput">
-<kbd class="command">mkdir -v ../glibc-build
-cd ../glibc-build</kbd>
+<kbd class="command">sed -i 's/ -lgcc_s//' Makeconfig</kbd>
 </pre>
         <p>
-          Glibc は i386 をサポートしなくなりました。開発者によると x86 マシンに対してはコンパイラフラグとして
-          <em class="parameter"><code>-march=i486</code></em> を指定する必要があります。
-          これを実際に指定する方法はいくつかあります。 もっとも試してみれば分かりますが、ビルド時の変数 「<span class=
-          "quote">CFLAGS</span>」 にて設定しておくのが一番です。 Glibc の内部的なビルドシステムが利用する
-          CFLAGS を上書き設定するのとは別に <code class="filename">configparms</code>
-          ファイルという特別なファイルを使って CFLAGS に対して追加設定を行うこともできます。 -mtune=native
-          というフラグも必要で -march を設定した際に変更される -mtune の値を適切にリセットします。
+          Glibc のドキュメントでは、ソースディレクトリ以外の専用のビルドディレクトリを作成することが推奨されています。
         </p>
         <pre class="userinput">
-<kbd class="command">case `uname -m` in
-  i?86) echo "CFLAGS += -march=i486 -mtune=native" &gt; configparms ;;
-esac</kbd>
+<kbd class="command">mkdir -v ../glibc-build
+cd ../glibc-build</kbd>
 </pre>
         <p>
           次に Glibc をコンパイルするための準備をします。
         </p>
         <pre class="userinput">
-<kbd class="command">../glibc-2.13/configure --prefix=/tools \
-    --host=$LFS_TGT --build=$(../glibc-2.13/scripts/config.guess) \
-    --disable-profile --enable-add-ons \
-    --enable-kernel=2.6.22.5 --with-headers=/tools/include \
-    libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes</kbd>
+<kbd class="command">../glibc-2.16.0/configure                             \
+      --prefix=/tools                                 \
+      --host=$LFS_TGT                                 \
+      --build=$(../glibc-2.16.0/scripts/config.guess) \
+      --disable-profile                               \
+      --enable-add-ons                                \
+      --enable-kernel=2.6.25                          \
+      --with-headers=/tools/include                   \
+      libc_cv_forced_unwind=yes                       \
+      libc_cv_ctors_header=yes                        \
+      libc_cv_c_cleanup=yes</kbd>
 </pre>
         <div class="variablelist">
           <p class="title">
-            <b>configure オプションの意味</b>
+            <b>configure オプションの意味:</b>
           </p>
           <dl>
             <dt>
               <span class="term"><em class="parameter"><code>--host=$LFS_TGT,
-              --build=$(../glibc-2.13/scripts/config.guess)</code></em></span>
+              --build=$(../glibc-2.16.0/scripts/config.guess)</code></em></span>
             </dt>
             <dd>
               <p>
                 このようなオプションを組み合わせることで <code class="filename">/tools</code>
-                ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81«ã\81\82ã\82\8bã\82¯ã\83­ã\82¹ã\82³ã\83³ã\83\91ã\82¤ã\83©ã\80\81ã\82¯ã\83­ã\82¹ã\83ªã\83³ã\82«を使って Glibc がクロスコンパイルされるようになります。
+                ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81«ã\81\82ã\82\8bã\82¯ã\83­ã\82¹ã\82³ã\83³ã\83\91ã\82¤ã\83©ã\83¼ã\80\81ã\82¯ã\83­ã\82¹ã\83ªã\83³ã\82«ã\83¼を使って Glibc がクロスコンパイルされるようになります。
               </p>
             </dd>
             <dt>
@@ -142,12 +145,11 @@ esac</kbd>
             </dd>
             <dt>
               <span class="term"><em class=
-              "parameter"><code>--enable-kernel=2.6.22.5</code></em></span>
+              "parameter"><code>--enable-kernel=2.6.25</code></em></span>
             </dt>
             <dd>
               <p>
-                Linux カーネル 2.6.22.5 以上のサポートを行うよう指示します。
-                これ以前のカーネルは利用することができません。
+                Linux カーネル 2.6.25 以上のサポートを行うよう指示します。 これ以前のカーネルは利用することができません。
               </p>
             </dd>
             <dt>
@@ -156,7 +158,7 @@ esac</kbd>
             </dt>
             <dd>
               <p>
-                これまでに tools ディレクトリにインストールしたヘッダファイルを用いて Glibc をビルドすることを指示します。
+                ã\81\93ã\82\8cã\81¾ã\81§ã\81« tools ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81«ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97ã\81\9fã\83\98ã\83\83ã\83\80ã\83¼ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ç\94¨ã\81\84ã\81¦ Glibc ã\82\92ã\83\93ã\83«ã\83\89ã\81\99ã\82\8bã\81\93ã\81¨ã\82\92æ\8c\87示ã\81\97ã\81¾ã\81\99ã\80\82
                 こうすればカーネルにどのような機能があるか、どのようにして処理効率化を図れるかなどの情報を Glibc
                 が得られることになります。
               </p>
@@ -168,13 +170,13 @@ esac</kbd>
             <dd>
               <p>
                 <a class="xref" href="binutils-pass1.html" title=
-                "5.4. Binutils-2.21 - 1回め">5.4.「Binutils-2.21 - 1回め」</a>
-                においてインストールしたリンカは、クロスコンパイルにより生成したものです。 これは Glibc
+                "5.4. Binutils-2.22 - 1回め">5.4.「Binutils-2.22 -
+                1回め」</a>においてインストールしたリンカーは、クロスコンパイルにより生成したものです。 これは Glibc
                 をインストールするまでは使えません。 これはつまり force-unwind
-                サポートに対するテストは失敗することを意味します。 正しく動作するリンカに依存するためです。
-                libc_cv_forced_unwind=yes の変数設定は、 <span class=
-                "command"><strong>configure</strong></span> スクリプトに対して
-                テストを実行しなくても force-unwind サポート機能を利用可能とすることを指示します。
+                ã\82µã\83\9dã\83¼ã\83\88ã\81«å¯¾ã\81\99ã\82\8bã\83\86ã\82¹ã\83\88ã\81¯å¤±æ\95\97ã\81\99ã\82\8bã\81\93ã\81¨ã\82\92æ\84\8få\91³ã\81\97ã\81¾ã\81\99ã\80\82 æ­£ã\81\97ã\81\8få\8b\95ä½\9cã\81\99ã\82\8bã\83ªã\83³ã\82«ã\83¼ã\81«ä¾\9då­\98ã\81\99ã\82\8bã\81\9fã\82\81ã\81§ã\81\99ã\80\82
+                libc_cv_forced_unwind=yes の変数設定は、<span class=
+                "command"><strong>configure</strong></span>
+                ã\82¹ã\82¯ã\83ªã\83\97ã\83\88ã\81«å¯¾ã\81\97ã\81¦ã\83\86ã\82¹ã\83\88ã\82\92å®\9fè¡\8cã\81\97ã\81ªã\81\8fã\81¦ã\82\82 force-unwind ã\82µã\83\9dã\83¼ã\83\88æ©\9fè\83½ã\82\92å\88©ç\94¨å\8f¯è\83½ã\81¨ã\81\99ã\82\8bã\81\93ã\81¨ã\82\92æ\8c\87示ã\81\97ã\81¾ã\81\99ã\80\82
               </p>
             </dd>
             <dt>
@@ -188,6 +190,17 @@ esac</kbd>
                 のクリーンアップハンドリング (cleanup handling) のサポートを指定します。
               </p>
             </dd>
+            <dt>
+              <span class="term"><em class=
+              "parameter"><code>libc_cv_ctors_header=yes</code></em></span>
+            </dt>
+            <dd>
+              <p>
+                さらに <span class="command"><strong>configure</strong></span>
+                スクリプトに対して libc_cv_ctors_header=yes も指示します。 これによりテストがスキップされ
+                gcc コンストラクターが設定されます。
+              </p>
+            </dd>
           </dl>
         </div>
         <p>
@@ -218,7 +231,7 @@ esac</kbd>
 </pre>
         <p>
           このパッケージにテストスイートは存在しますが、ここで実行することはできません。 この時点ではまだ C++
-          コンパイラを構築していないためです。
+          ã\82³ã\83³ã\83\91ã\82¤ã\83©ã\83¼ã\82\92æ§\8bç¯\89ã\81\97ã\81¦ã\81\84ã\81ªã\81\84ã\81\9fã\82\81ã\81§ã\81\99ã\80\82
         </p>
         <div class="admon note">
           <img alt="[注記]" src="../images/note.png" />
@@ -231,7 +244,7 @@ esac</kbd>
             テストスイートの実行は不要と説明していることから、これに従って実行しない場合はロケールデータをここでインストールする必要はありません。
             適切なロケールデータは次章にてインストールします。 それでもここでインストールするなら <a class="xref" href=
             "../chapter06/glibc.html" title=
-            "6.9. Glibc-2.13">6.9.「Glibc-2.13」</a> に示される手順に従ってください。
+            "6.9. Glibc-2.16.0">6.9.「Glibc-2.16.0」</a>に示される手順に従ってください。
           </p>
         </div>
         <p>
@@ -240,12 +253,60 @@ esac</kbd>
         <pre class="userinput">
 <kbd class="command">make install</kbd>
 </pre>
+        <div class="admon caution">
+          <img alt="[注意]" src="../images/caution.png" />
+          <h3>
+            注意
+          </h3>
+          <p>
+            この時点で以下を必ず実施します。 新しいツールチェーンの基本的な機能 (コンパイルやリンク)
+            が正常に処理されるかどうかを確認することです。 健全性のチェック (sanity check)
+            を行うものであり、以下のコマンドを実行します。
+          </p>
+          <pre class="userinput">
+<kbd class="command">echo 'main(){}' &gt; dummy.c
+$LFS_TGT-gcc dummy.c
+readelf -l a.out | grep ': /tools'</kbd>
+</pre>
+          <p>
+            すべてが正常に処理され、エラーが発生しなければ、最終のコマンドの実行結果として以下が出力されるはずです。
+          </p>
+          <pre class="screen">
+<code class=
+"computeroutput">[Requesting program interpreter: /tools/lib/ld-linux.so.2]</code>
+</pre>
+          <p>
+            ダイナミックリンカーのプリフィックスは <code class="filename">/tools/lib</code>、あるいは
+            64 ビットマシンであれば <code class="filename">/tools/lib64</code> となります。
+          </p>
+          <p>
+            出力結果が上とは異なったり、あるいは何も出力されなかったりした場合は、どこかに不備があります。
+            どこに問題があるのか調査、再試行を行って解消してください。 解決せずにこの先に進まないでください。
+          </p>
+          <p>
+            すべてが完了したら、テストファイルを削除します。
+          </p>
+          <pre class="userinput">
+<kbd class="command">rm -v dummy.c a.out</kbd>
+</pre>
+        </div>
+        <div class="admon note">
+          <img alt="[注記]" src="../images/note.png" />
+          <h3>
+            注記
+          </h3>
+          <p>
+            次節にてビルドする Binutils では、ツールチェーンが正しく構築できたかどうかを再度チェックすることになります。
+            Binutils のビルドに失敗したとしたら、それ以前にインストールしてきた Binutils, GCC, Glibc
+            のいずれかにてビルドがうまくできていないことを意味します。
+          </p>
+        </div>
       </div>
       <div class="content" lang="ja" xml:lang="ja">
         <p>
           本パッケージの詳細は <a class="xref" href=
           "../chapter06/glibc.html#contents-glibc" title=
-          "6.9.4. Glibc の構成">6.9.4.「Glibc の構成」</a> を参照してください。
+          "6.9.4. Glibc の構成">6.9.4.「Glibc の構成」</a>を参照してください。
         </p>
       </div>
     </div>
@@ -253,15 +314,16 @@ esac</kbd>
       <ul>
         <li class="prev">
           <a accesskey="p" href="linux-headers.html" title=
-          "Linux-2.6.37 API ヘッダ">前のページ</a>
+          "Linux-3.5.2 API ヘッダー">前のページ</a>
           <p>
-            Linux-2.6.37 API ヘッダ
+            Linux-3.5.2 API ヘッダー
           </p>
         </li>
         <li class="next">
-          <a accesskey="n" href="adjusting.html" title="ツールチェーンの調整">次のページ</a>
+          <a accesskey="n" href="binutils-pass2.html" title=
+          "Binutils-2.22 - 2回め">次のページ</a>
           <p>
-            ツールチェーンの調整
+            Binutils-2.22 - 2回め
           </p>
         </li>
         <li class="up">
@@ -270,7 +332,7 @@ esac</kbd>
         </li>
         <li class="home">
           <a accesskey="h" href="../index.html" title=
-          "Linux From Scratch - Version 6.8">ホーム</a>
+          "Linux From Scratch - Version 7.2">ホーム</a>
         </li>
       </ul>
     </div>