gcc4.6.2の手動インストールメモ

普段の研究にはPythonを用いているのですが,どうも大規模データを扱うには不向き(というか遅い)のでC++でコーディングすることにしました.とりあえず研究室の実験サーバの環境を知ろうと思って,gccのバージョンを調べてみたら4.1.2でした.2006年にリリースされているバージョンを使っているのかー,どうしようと思ったのですが,せっかくだし最新版を使いたいということで,gcc4.6.2をインストールすることに.でもsuじゃないから,aptitudeでらくらくインストールはできないので,自分のディスク領域に手動インストールをします,というところで少々困った部分が生じたのでメモ.

インストール手順

基本的にはこちらのサイトを参考にさせて頂きました.

GCC 4.6.2が出たので手動インストール方法メモ(Linux) | さかな前線

GMP,MPFR,MPCのインストール

簡単にいえば,gccをビルドするには,GMPとMPFRとMPCというライブラリが必要なので,gccのビルドに先んじてこの3つをインストールする必要があるんですねー.
インストール先を,自分の書き込み権限がある場所にしたい場合は,以下のようにして
インストールしたい場所を指定してください.
INSTALL_PATHの部分に/usr/localを指定すると,make installした時のインストール先が/usr/local以下になります.

$ ./configure --prefix=INSTALL_PATH
$ make -j8
$ make install -j8

-j8は並列化することでmakeを高速化するためのオプションです.
この場合は8並列まで許容しています.
マルチプロセッサの環境では,処理が劇的に早くなることがありますので,是非.
以下,マニュアルより.

-j jobs

    同時に実行できるジョブ(コマンド)の数を指定する。-jオプションが複数個指定された場合は、最後の指定が有効になる。引き数無しで -jオプションが与えられた場合、makeは同時に実行できるジョブの数を制限しない。

基本的にここまでは問題有りませんでした.

gccのインストール

次に,本命のgccをインストールします.
このとき,上記で各ライブラリのインストール先を変更している場合は,GMP_PATHなどの部分にインストール先へのパスを指定してください.
./configureののちにmakeします.

$ ./configure --program-suffix=-4.6 --prefix=INSTALL_PATH --with-gmp=GMP_PATH --with-mpfr=MPFR_PATH --with-mpc=MPC_PATH
$ make -j8

ここで,問題が発生しました.
makeが以下のようなエラーを吐いて止まってしまいます.

libgmp.so: could not read symbols: File in wrong format

見たことのないエラーだったのでエラーメッセージをコピペして検索.
が...あまり情報がなく2時間ほど様々なサイトをぐるぐる回った末にこのサイトに行きつきました.

Protected Blog › Log in

どうやら,libjavaというコンポーネントをビルドしようとするときに32bitと64bitのGMPを両方共呼びだそうとするバグが原因のようです.
解決方法も付記されていたので試してみたところこれがビンゴ!
--disable-libjavaというオプションを./configureの段階で指定することで,エラーを回避できるようです.なんとかインストールすることができました.
最後に,エラーを回避する場合のコマンドを書いておきます.

$ ./configure --program-suffix=-4.6 --prefix=INSTALL_PATH --with-gmp=GMP_PATH --with-mpfr=MPFR_PATH --with-mpc=MPC_PATH --disable-libjava
$ make -j8
$ make install

あー,すごく時間取られた...
でも,解決できただけマシか.