背景
大家好,
我正在尝试使用 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
?