C++ Ubuntu 12.04上的Boost.MPI 背景

C++ Ubuntu 12.04上的Boost.MPI 背景,c++,boost,ubuntu,mpi,C++,Boost,Ubuntu,Mpi,大家好 我正在尝试使用Boost::MPI,目前我正在尝试从中运行简单的第一个示例。我在构建/运行它时遇到问题 我使用apt get安装了boost,并使用synaptic软件包管理器安装了boost_mpi和boost_序列化(1.48.0)。我使用apt get安装了MPICH2 尽管OpenMPI从未被明确安装过,但它似乎在我的系统上,我假设这是Boost::MPI的一个依赖项,但MPICH2和OpenMPI似乎是在相互竞争 信息 如果我使用 g++ test.cpp -I/usr/inc

大家好

我正在尝试使用Boost::MPI,目前我正在尝试从中运行简单的第一个示例。我在构建/运行它时遇到问题

我使用apt get安装了boost,并使用synaptic软件包管理器安装了boost_mpi和boost_序列化(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的错误。如果我尝试使用

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
运行?

通常不支持针对不同MPI库编译混合代码。如果您的Boost::MPI与Open MPI链接,那么您必须在应用程序的其余部分使用Open MPI


要获取
mpic++
以及其他编译器包装器和所有头文件,您应该为openmpi安装
-dev
包。如果库已作为依赖项安装,则只有运行时部分会存在。

您不能卸载openmpi或mpich吗?我尝试运行
sudo apt get remove mpich2
,但它似乎离开了所有库,并在我的系统上包含文件try
sudo apt get purge mpich2
purge
也将删除所有文件。@但您可能需要删除libmpich toetried
sudo apt get purge mpich2
,现在它找不到
mpiexec
。而且,
apt-get
不会接触openmpi-dev,因为它认为它是最新的。lliev-如何为openmpi安装-dev包。在dev软件包上进行apt-get安装会得到该软件包的1.4版本,而不是最新版本。