gccのソースを入手
ここ(http://gcc.gnu.org/mirrors.html)の適当なミラーからソースを入手。
今回は4.6.3のg++なので
gcc-g++の中身を解凍したらgccのディレクトリに上書き。コマンドだと同階層で解凍するだけ。
tar -jxf gcc-4.6.3.tar.bz2 tar -jxf gcc-g++-4.6.3.tar.bz2
依存パッケージ
ビルドの前に以下のコマンドで依存パッケージを入手
sudo aptitude install libgmp3-dev libmpfr-dev libmpc-dev libc6-dev-i386
aptitudeで入手できるのはここまで。
unzipとzipはaptitudeで用意されているバージョンが低いので手動でインストール。
wget ftp://ftp.info-zip.org/pub/infozip/src/unzip60.tgz gunzip unzip60.tgz tar -xvf unzip60.tar cd unzip60 make -f unix/Makefile generic sudo make -f unix/Makefile install
wget ftp://ftp.info-zip.org/pub/infozip/src/zip30.tgz gunzip zip30.tgz tar -xvf zip30.tar cd zip30 make -f unix/Makefile generic sudo make -f unix/Makefile install
(http://stackoverflow.com/questions/13028011/gcc-4-6-3-fail-to-install-debian)
ビルド
パッケージを入手したらあとは次のコマンド
./configure --program-suffix=4.6 --disable-multilib make -s -j9 sudo make install -s
- -sは標準出力に流れるメッセージの量を少し減らす.
- -j7は並列コンパイルの設定.コア数+1が無難.
- もし、途中でビルド失敗してconfigure修正してやり直したけどそれでもダメって時は一度ディレクトリを削除して解凍からやり直すとキャッシュの関係でうまくいことがあるとかないとか。
バージョン切り替え
このままだと単に"gcc"とした場合のバージョンが古いままになってしまうので、バージョンを切り替えられるように設定。
まずは登録
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 44 --slave /usr/bin/g++ g++ /usr/bin/g++4.4 sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc4.6 46 --slave /usr/bin/g++ g++ /usr/local/bin/g++4.6
切り替える時は
sudo update-alternatives --config gcc
使用できるコンパイラのバージョンの一覧が表示されるので番号で指定。
一応切り替わったかを次のコマンドで確認
gcc -v
共有ライブラリパスの追加
このままだと、共有ライブラリを探しに行く時に/usr/lib/を探しに行くのだが、/usr/lib/に存在するライブラリはもともと存在していたgccの共有ライブラリで、4.6.xには対応していない。
そのため、/etc/ld.co.confに次の行を追加してldconfigすることになる。
/usr/local/gcc4.6/lib64/ /usr/local/gcc4.6/lib/
この、コンパイラのために共有ライブラリパスを書くというマヌケなことを回避する方法は無いんでし
ょうか?
/usr/lib/以下に/usr/local/gcc4.6/lib*/以下をコピーしてしまうという手もあるのですが、これって問題無いんでしょうか?
あと、これをやるとldconfigの際に次のエラーメッセージが
ldconfig: /usr/local/gcc4.6/lib64/libstdc++.so.6.0.16-gdb.py はELFファイルではありません - 間違ったmagicバイトをファイルの先頭に持っています.
どうやら特に実害のない警告のようです。精神的にはよろしくありませんが。
(http://www.mail-archive.com/lfs-support@linuxfromscratch.org/msg13351.html)
追記
ここでは、/usr/local以下にgccをインストールしてupdate-alternativesで切り替えていますが、そもそもシステムに関連するプログラムをupdate-alternativesで切り替えるのは危険(Linuxカーネルのコンパイルとか)なので、パッケージでなんとか出来るんならパッケージで何とかしましょう。
感想
i7のエクストリームはgccのビルドの早さもエクストリームだった(小並感)