推定構築時間: 4.4 SBU 推定必要ディスクスペース: 300 MB |
GCC パッケージは C 及び C++ コンパイラなどを含む GNU コンパイラコレクションを収容しています。
インストールされるプログラム: c++, cc (link to gcc), cc1, cc1plus, collect2, cpp, g++, gcc, gccbug, 及び gcov
インストールされるライブラリ: libgcc.a, libgcc_eh.a, libgcc_s.so, libstdc++.[a,so] 及び libsupc++.a
GCC は以下のパッケージに依存します: Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.
さしあたりは C++ コンパイラを必要としないので、GCC-core の tarball を解凍するだけにしておきます。
Note: GCC が重要な toolchain パッケージであっても、初期段階ではテストスイートを実行するつもりはありません。 まず、テストスイートがテストする範囲がまだ適当ではありませんし、二つ目の理由は、第 1 段階でのプログラムはすぐにその第 2 段階インストールで上書きされてしまうからです。
このパッケージはデフォルト最適化フラグ( -march と -mcpu オプションを含む)を変更するとおかしなふるまいをすると知られています。 ですから、たとえば CFLAGS や CXXFLAGS のような、デフォルトの最適化を書きかえるような何かの環境変数を定義したなら、GCC を構築する時に、その設定を解除するか、修正するようお勧めします。
GCC の文書は、ソースディレクトリとは別の構築専用ディレクトリでコンパイルするよう勧めています。
mkdir ../gcc-build cd ../gcc-build |
それでは コンパイルのために GCC を準備します。
../gcc-3.3.1/configure --prefix=/tools \ --with-local-prefix=/tools \ --disable-nls --enable-shared \ --enable-languages=c |
コンフィグオプションの意味
--with-local-prefix=/tools: このスイッチの目的は gcc の include 検索パスから、/usr/local/include を除外することです。 これは必須ではありませんが、ホストシステムへの影響を最小限にしたいので、このようにすることには意味があります。
--enable-shared: このスイッチは、初めピンとこないかもしれません。 しかしこれを使うと、libgcc_s.so.1 と libgcc_eh.a の構築を許可し、さらに使える libgcc_eh.a を持っているということは、Glibc (次にコンパイルするパッケージ)に関する設定スクリプトが適切な結果になるのを確実にします。 gcc のバイナリ類は、さらに BOOT_FLAGS の -static 値で制御されるので、今まで通り静的にリンクされることに注意してください。
--enable-languages=c: このオプションは C コンパイラだけが構築されるようにします。 このオプションは、GCC tarball をすべてダウンロードして解凍した時にだけ必要になります。
パッケージのコンパイルを続けます。
make BOOT_LDFLAGS="-static" bootstrap |
make パラメータの意味
BOOT_LDFLAGS="-static": これは GCC にそのプログラムを静的にリンクすることを伝えます。
bootstrap: このターゲットは、GCC をただコンパイルするだけではなく、何度かコンパイルします。 最初にコンパイルしたプログラムそのものを 2 回目のコンパイルに使い、さらに 3 回目にも使います。それから、同じものをきちんと再生成できるのを確かめるために、2 回目と 3 回目のコンパイルを比較します。 完全に再生成しているということは、たぶん正しくコンパイルされということになります。
それではパッケージをインストールします。
make install |
仕上げに /tools/bin/cc のシンボリックリンクを作成します。 多くのプログラムやスクリプトが gcc の代わりに cc を使うというのは、プログラムに一般性を持たせるということですから、すべての Unix システムで使えるということです。 すべての人が GNU C コンパイラをインストールしているわけではありません。 単に、cc を使っておくことで、それに対してシンボリックリンクさえ作れば、システム管理者がどの C コンパイラをインストールするかについては制約が無くなります。
ln -sf gcc /tools/bin/cc |