さすがにNightlyを常用するようなアレじゃないので,公式リリース待ってました.
で,ディストロの標準パッケージではたいてい落とせないと思うので,手動インストールを.
ということで,Linuxな人がgccを初めてイチからインストールするときの手順を簡単にまとめます.
インストールしませう
私の手元の環境(ラボマシン)は,i7-920,3GB,Ubuntu 10.10 x86,gcc 4.4.5です.
各作業の所要時間を書いとくのでご参考にどうぞ.
置き換えではありません
ここでしようとするのは非4.6系列のgccを4.6.2に置き換えるわけではありません.
例えばCUDA4.0なんかはgcc-4.4.x系でないと使えない…そういうようなことがあるので,4.6系列の新規追加インストール,という形になります.
OpenCVも4.6.xじゃなんかビルド通りませんでしたし...
必要なライブラリ
gccをビルドするには,次のライブラリ群をこの順でインストールしておく必要があります.
どれも最新版でOKです(以下に書いてあるバージョンは投稿日現在).
-
GMP
- 任意精度算術演算ライブラリ
- http://gmplib.org/
- 現在のバージョンは5.0.2
-
MPFR
- こちらも任意精度の浮動小数点数演算ライブラリ
- GMPに依存
- INRIA(フランスの公的機関)がメンテしてます
- http://www.mpfr.org/
- 現在のバージョンは3.1.0
-
MPC
- 複素数演算ライブラリ
- MPFRに依存
- http://www.multiprecision.org/
- 現在のバージョンは0.9
数値計算ライブラリしか要求しないってなんかすごい.
-
DejaGNU
- これはgccのビルド後のテストをするのに必要(runtestコマンド)
- テストしないなら必要ない
- http://www.gnu.org/software/dejagnu/
- ubuntuの場合は標準パッケージなのでaptitudeでdejagnuをinstall
それで,gcc本体はhttp://gcc.gnu.org/mirrors.htmlのどっかから.
例えばhttp://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.6.2/にあります(負荷分散のため適切なミラーを選んでくださいね).
coreと必要言語でもいいのですが(ビルド時間が凄まじいので必要最小限の方がいいかも),今回は全体(gcc-4.6.2.tar.bz2)にします.
ビルド,インストール
どれもconfigureしてmakeしてmake installするだけです.…ってそれじゃだめですか.そうですか.
で,configure時にビルド設定をいろいろする必要がある場合は適宜追加してください.
-sと-j8オプションはお好きなように.
% ls gcc-4.6.2.tar.bz2 gmp-5.0.2.tar.bz2 m4-1.4.16.tar.bz2 mpc-0.9.tar.gz mpfr-3.1.0.tar.bz2 % tar xf gmp-5.0.2.tar.bz2 % cd gmp-5.0.2 % ./configure % make -s -j8 #20秒とかくらい % make check -s -j8 #1分ちょっとくらい % sudo make install % cd .. % tar xf mpfr-3.1.0.tar.bz2; cd mpfr-3.1.0 % ./configure; make -s -j8; make check -s -j8; sudo make install #ぜんぶで1分くらい % cd .. % tar xf mpc-0.9.tar.gz; cd mpc-0.9 % ./configure; make -s -j8; make check -s -j8; sudo make install #これもぜんぶで1分くらい?
ここまでぜんぶで5分かからないと思います.ここからはそうはいきません...
さて,そのまえにこれは知っといてね,という話.
そもそもこれからしようとしてるのはコンパイラを更新することなので,更新したコンパイラでコンパイラ(やランタイムライブラリ)自体を再コンパイルするとよいはずです.
でないと例えば,最新コンパイラで実装された最適化機能をコンパイラ自体が生かしたうえで動作してないことになるわけで.それをしないことも動作上は問題ないと期待してよいわけではあるんですが.
さらには,その再コンパイルしたコンパイラで自分自身をコンパイルし直したとき今動いてる自分自身と全く同じものが得られたなら,新コンパイラの正しさにひとつの担保がついたと言えます.
そんな感じで結局,gccではconfigureしたあと普通にmakeをすると,3回(3ステージ)分,まるごとビルドをしてくれます.
ということでgccのビルド.
configureのオプションに注意.
% cd .. % tar xf gcc-4.6.2.tar.bz2; cd gcc-4.6.2 % ./configure --program-suffix=-4.6 % make -s -j8 % make check -s -j8 #しなくてもいい.やるならDejaGNUが必要(前述). % sudo make install -s
たぶんぜんぶで1時間半くらいかかりました.
ついでに,alternativeの設定
この節では,gccの4.4.xと4.6.xが共存する環境で必要に応じてデフォルトのバージョンを切り替えられるよう設定をします.
ここまでの作業で,インストール先は/usr/local/bin/gcc-4.6に.
なので,実行確認てことでこうなっても怒らないでください><
% gcc --version gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5 Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ちゃんとはいってますから><
% gcc-4.6 --version gcc-4.6 (GCC) 4.6.2 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
で,
% gcc
で実行されるgccのバージョンが,必要に応じて4.4.x系とか4.6.x系とか選べるといいですよね.
エイリアスおよびCC,CXX環境変数の設定でやってもいいんですが,もっとスマートに切り替えるためにalternativesというツールがあります.
これを使って,/usr/bin/gcc (これはsymbolic linkです)を必要に応じて書き換えてしまいましょう.
% sudo update-alternatives --install /usr/bin/g++ g++ /usr/local/bin/g++-4.6 46 update-alternatives: /usr/bin/g++ (g++) を提供するために 自動モード で /usr/local/bin/g++-4.6 を使います。 % sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 44
最後の数字は優先度で,今は新しいものを高優先度にしていますが,必要に応じて変えてください.
あと既存gccのパスも環境によって違うかもしれません(/usr/local/binかも).
で,同じ設定をgcc,cc,g++など使うコンパイラごとにやってください.
そうすると,あとはコマンドひとつで
% sudo update-alternatives --config g++ There are 2 choices for the alternative g++ (providing /usr/bin/g++). 選択肢 パス 優先度 状態 ------------------------------------------------------------ * 0 /usr/local/bin/g++-4.6 46 自動モード 1 /usr/bin/g++-4.4 44 手動モード 2 /usr/local/bin/g++-4.6 46 手動モード 現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 2 % g++ --version g++ (GCC) 4.6.2 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
素晴らしい.
/usr/binじゃなくて,(パスを通した上で)$HOME/binなんかにすればupdate-alternativesにsudoがいりません.
しかしこの辺はrvmの方がスマートだと思うんだ><
gccがさらにバージョンアップしたら
gccのビルドではGMP,MPFR,MPいずれも常に最新版を要求するわけではありません.
なので,一度この作業を一通りやったなら,今後当分はgccだけを落として再ビルドするだけでよいです.
ただまぁ上にした話を突き詰めるとGMP,MPC,MPFRもそれぞれ更新後のコンパイラでコンパイルしてさらにそれに基づいてもう一度コンパイラをコンパイルしたほうがいいという果てしないかんじになるんですけども.
gccのインストールが上手くいかないので教えて下さい。
Ubuntu11.04にgcc4.6.2を上記手順に従ってインストールしているのですが、MPCのconfigureにてエラーが発生します。
config.logには、
gcc: error trying to exec ‘cc1’: execvp No such file or directory
と書かれていたので、cc1を検索すると
/usr/lib/i386-linux-gun/i686-linux-gun/4.5/cc1
があったのですが、シンボリックリンクを貼ろうが実体をコピーしようが、同じcc1のエラーが発生してしまいます。
Linux初心者なので、リンク方法が問題なのか、それとも他に何か設定が必要なのか、あるいはパッケージが必要なのかサッパリ分からず困っており、教えて頂きたいです。
よろしくお願い致します。
うーん,gccは入ってますでしょうか?
って,当たり前か…GMPやMPFRについてはちゃんとできたってことですよね.
cc1ってのはコンパイラ本体で,gccのバックエンドとして動きます.なので,cc1が見つからないということはgccが無いか,無いことはなくてもなんか設定が狂ってヘンになってるか,そのあたりしか思い浮かばないですね….
gccをaptから消して入れなおしてみるとかいかがでしょう.
ちなみにubuntu 11.04ということでしたらMPCはlibmpc-devパッケージを入れれば自前ビルドしないでもいけるはずです.たしか.
gccはデフォルトで4.5.2が入っています。
cc1の実体は、
/usr/lib/i386-linux-gun/gcc/i686-linux-gun/4.5/cc1
にあり、configureするディレクトリィにコピーしてみましたが、エラーに変化はありませんでした。
一応、lddにて共有ライブラリを調べましたが全部揃ってはいるようです。
libmpc-devはインストールして、gccのインストールに進んでみましたが、同じくconfigureにてcc1が無いと言われます。
> daiさん
configureと同じディレクトリにコピーしたとしても,そこにPATHが通っていなければcc1がないと言われます.
まず,
$ which cc1
cc1の場所が出力されますが?
もし出力されないのであればPATHの問題はあるので,
$ PATH=/usr/lib/i386-linux-gun/gcc/i686-linux-gun/4.5:$PATH ./configure
と試してみてください.
>layさん
確かにPATHが通っていませんでした。
無事解決出来ました。ありがとうございました。
それでも、また別のエラーが出てしまい、MPCのconfigureで止まっています。
月曜日までに自力で解決できなければ、またお世話になるかと思いますが、よろしくお願いします。
>daiさん
解決したようでよかったですが、一難去ってまた一難…ですか(。・x・)
僕もいろいろライブラリとかを自前ビルドして使ってますがそんなに奇妙なエラー連発で苦しんだ経験がないもので。
まだ見ておられましたら、一応個人的興味で気になるのでその新たなエラー出力だけでも貼っていただけますでしょうか?あるいは解決したらしたで現象と対処内容を教えていただけたらと思います(知恵の共有的な意味も兼ねて
>layさん
助け舟ありがとうございます!!
twitterで僕が誰かへるぷ!><と言ったのを見ていただけたのでしょうか?w
>layさん、belltailさん
MPCの問題ですが、1/27日にGMPの最新バージョンが5.0.3に上がっており、それを使う事で何とか解消しました。
また、gccのmake中にJAVAのエラーが多数出てきて大変苦労しました。
私の環境ではJAVA関係のヘッダファイルがほとんど無かったようなので、エラーに従い一つずつダウンロードしていました。
しかし、あるサイトで–disable-libjavaというオプションを./configureで指定する事でエラーを回避できると書かれており、指定するとインストールまでエラーは全て回避出来ました。
お陰様で無事GCC4.6.2をインストール出来ました。
大変有難うございました。