gcc 4.6.2とOpenMPIとBoost.1.49.0をインストールする
ただのメモ書きです。Boost.1.49.0はBoost.MPIも使えるようにしておく。
gcc 4.6.2のビルド
今回は /usr/shareの中にgcc-4.6というディレクトリを掘ってそこにインストール。
まず必要な3つのライブラリをインストール。
GMP -> MPFR -> MPC の順に./configureしてmake -s -j 8 installとかでインストール。
ちなみに./configureする際に変えなきゃいけない設定がある時はあるので適宜修正する。ちなみに今回は特に必要なこともなく終わった。
インストール後、gccビルド時に共有ライブラリを参照するので、ldconfigか、LD_LIBRARY_PATH環境変数でこれらの共有ライブラリを参照できるようにしておく。
追加で32bit, 64bitの共有でglibcを-develも含んで最新版をインストールしておく。
後はgccのビルド、./configureのときにC,C++,fortranの最小構成でビルドし、prefixをインストール先のディレクトリ、suffixをバージョン名とかにして区別する。
なんでC,C++,fortranの3つかというとC, C++はCUDAとか計算で使うのだが、どうもfortranで書いたコードを使う必要がある(?)らしいので仕方なく入れておく。後の言語はほぼ使わないので省略。入れたきゃ勝手に入れるべき。
# ./configure --enable-languages=c,c++,fortran --program-prefix=/usr/share/gcc-4.6 --program-suffix=-4.6
これが終わったらmake -s -j 8 installでビルド, インストールができるはず。
この時点でupdate-alternativesを使ってOSのデフォルトのgccと,今インストールしたgccを切り替えるようにする。
nvcc 4.1なんかもgcc 4.6で動くようなのでデフォルトはgcc 4.6、gcc 4.2が入ってるようなのでそっちにも切り替えられるようにしておく。
3月4日追記)どうも勘違いだったのかもしれない。今やったらビルドできなくなった。gcc 4.5はサポートしているらしい?
update-alternativesの使い方はググれ。
ちなみに、OSのデフォルトのgcc 4.2がgccという名前で置いてくれていたので名前を書き換えた。どうせ後でgccという名前でシンボリックリンク貼るので問題ないはず。
今回はgcc, g++両方を一度に切り替えられるようにしておく。
# update-alternatives --install /usr/bin/gcc gcc /usr/share/gcc-4.6/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/share/gcc-4.6/bin/g++-4.6 # update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.2 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.2
3月5日追記)--install をつけるの忘れてました。
update-alternatives --config gcc等を使って、gcc, g++両方が変更できることを確認すると良い。
OpenMPIのビルド
研究室で使う必要があるためここでビルド。
wgetで引っ張ってくる。
今回は面倒だったのでOSの検索パスに入ってる/usr/binの中にmpicc, mpicxxが入るように設定。
# ./configure --prefix=/usr # make -s -j 8 install
インストール後、ldconfigを使って共有ライブラリを参照できるようにしておく。
この辺で、which mpicxxとかwhich mpiccを使って入っているか確認しておくと良い。
Boost.1.49.0のビルド
wget、ないしSVNやGitミラー等から最新のBoostをダウンロードする。
Boostのディレクトリ内に入り、./tools/build/v2/user-config.jamに対し以下の内容を記述する。
using gcc : 4.6 : g++ ; using mpi ;
研究室でMPIを使う必要があるのでBoost.MPIも使えるようにビルドしておく。
多分本当は全部一緒にビルド、インストールした方がいいんだけど面倒だったのでMPIとそれ意外で分けてある。
で、Boostのインストール先はOSの検索パスに引っかからないところの方が良い。なぜかというとOSなどでBoostのライブラリを使っているものがある可能性がある。そうするとバージョン違いで問題が起こるかもしれない。
今回は悩んだが、/etcにinclude, libを掘っておいた。まあまずそうだったら後でほかの場所に入れ替えてもいいと思う。
# ./b2 install --prefix=/etc --with-mpi -j 8 # ./b2 install --prefix=/etc -j 8
ビルド時には/etc/include, /etc/lib、実行時には/etc/libが参照されるように検索パスをいじっておく必要があることに注意すること。