Boost 1.53 を Boost.MPI 込みでインストールした手順のまとめ
主旨
前回 (さくら VPS 上に gcc4.8 をインストールする方法 - kawa0810の日記 ) の GCC 4.8 をインストール後に Boost 1.53 を Boost.MPI 込みでインストールした際の自分用まとめ記事です.
インストールに使用したもの
- OpenMPI 1.6.4:Open MPI: Open Source High Performance Computing
- Boost 1.53.0:Boost C++ Libraries
さらに,Boost のインストールには以下のパッケージが必要
# 今回は yum でインストールする
- python-devel
- zlib-devel
- bzip2-devel
また,デフォルト (/usr/local/) にインストールした場合は環境を壊す可能性があるとのことなので*1,/modules を作成しインストールする .
# OpenMPI も同じディレクトリにインストールする
OpenMPI のインストール
# cd ; mkdir openmpi; cd openmpi # wget http://www.open-mpi.org/software/ompi/v1.6/downloads/openmpi-1.6.4.tar.gz # tar xvzf openmpi-1.6.4.tar.gz # cd openmpi-1.6.4; mkdir build; cd build # ../configure --prefix=/modules # make -s -j 3 # make check -s -j 3 # make install # ldconfig # export PATH=$PATH:/modules/bin //パスを通す
Boost のインストール (Boost.MPI 込み)
//準備 # yum -y install python-devel # yum -y install zlib-devel # yum -y install bzip2-devel # export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/modules/lib:/usr/local/lib:/usr/local/lib64 # export LD_RUN_PATH=$LD_RUN_PATH:/modules/lib:/usr/local/lib:/usr/local/lib64 //Boost をダウンロード # cd ; mkdir boost; cd boost # wget http://sourceforge.net/projects/boost/files/boost/1.53.0/boost_1_53_0.tar.gz/download # tar xvzf boost_1_53_0.tar.gz # cd boost_1_53_0 //user-config.jam の編集 (Boost.MPI とコンパイラの指定) # emacs ./tools/build/v2/user-config.jam ... # ------------------ # GCC configuration. # ------------------ # Configure gcc (default version). # using gcc ; # Configure specific gcc version, giving alternative name to use. # using gcc : 3.2 : g++-3.2 ; using mpi ; //追加する using gcc : 4.8.1 : g++-4.8.1 ; //追加する ... //インストールする ./bootstrap.sh ./b2 install -j3 --prefix=/modules
問題と解決方法
コンパイルできるかのサンプルコードとして,ココ (MPI による並列計算 - boostjp) のコードを拝借.実際にコンパイルしようとすると以下のエラーメッセージがでる.
$ mpicxx main.cpp -lboost_mpi /modules/lib/libboost_serialization.so.1.53.0: undefined reference to `std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*)@GLIBCXX_3.4.15' collect2: ld はステータス 1 で終了しました
原因を調べてみると,GCC のバージョンが 4.6 以上じゃないと駄目ぽい? 今回の mpicxx の GCC のバージョンは以下の通り.
$ mpicxx --version g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3) 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.
試しにコンパイラを g++ 4.8.1 にする.
$ g++-4.8.1 main.cpp -lboost_mpi $(mpicxx -showme:link) $(mpicxx -showme:compile)
問題なくコンパイルと実行ができることを確認.
追記
パスの設定を毎回するのが面倒なので /etc/profile に以下を追記しとく
# /etc/profile に追記することで全ユーザのログイン時にパスが設定される
# Setting PATH MY_BIN=/modules/bin MY_LIB=/usr/local/lib64:/usr/local/lib:/modules/lib # export PATH export PATH=$PATH:$MY_BIN export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MY_LIB