バックグラウンド
こんにちは、みんな、
Boost :: MPIを使用しようとしていますが、現時点では、チュートリアルの簡単な最初の例を実行しようとしています。ビルド/実行に問題があります。
apt-getを使用してboostをインストールし、synapticパッケージマネージャーを使用してboost_mpiとboost_serialization(1.48.0)をインストールしました。apt-getを使用してMPICH2をインストールしました。
OpenMPIが明示的にインストールされたことがない場合でも、これは私のシステムにあるように見えますが、これはBoost :: MPIの依存関係であると思いますが、MPICH2とOpenMPIはお互いの足を踏み入れているようです。
情報
を使用してビルドする場合
g++ test.cpp -I/usr/include/mpich2 -L/usr/lib -lboost_mpi -lboost_serialization
次に、を使用して実行します
mpiexec -n 2 ./a.out
それはOpenMPIから来ているように見えるたくさんのエラーを投げます。を使用してOpenMPIライブラリに対してリンクしてビルドしようとすると
g++ test.cpp -L/usr/lib -lboost_mpi -lboost_serialization -lmpi -I/usr/include/openmpi
次のエラーが発生します。
/usr/bin/ld: /tmp/ccJ5ezv7.o: undefined reference to symbol 'ompi_op_set_cxx_callback'
/usr/bin/ld: note: 'ompi_op_set_cxx_callback' is defined in DSO /usr/lib/libmpi.so.0 so try adding it to the linker command line
/usr/lib/libmpi.so.0: could not read symbols: Invalid operation
mpic++
次のコマンドを使用してビルドしようとすると
mpic++ test.cpp -lboost_mpi -lboost_serialization
フォームのエラーの束を返すことはリンクされません
/usr/lib/libmpich.so: undefined reference to `MPL_trid'
だから私はlibmpiに対してリンクしてみました
mpic++ test.cpp -lboost_mpi -lboost_serialization -lmpi
これはビルドされますが、実行するmpiexec
と次のエラーが発生します
Fatal error in PMPI_Errhandler_set: Invalid communicator, error stack:
PMPI_Errhandler_set(118): MPI_Errhandler_set(comm=0x370500, errh=0x370be0) failed
PMPI_Errhandler_set(70).: Invalid communicator
質問
どういうわけか、OpenMPIとMPICH2は、本来あるべきではない場所で絡み合っているように思われます。OpenMPIまたはMPICH2のみに対してビルドし、正しい方法で実行する方法を知っている人はいますmpiexec
か?