boost mpi 示例编译

Posted

技术标签:

【中文标题】boost mpi 示例编译【英文标题】:boost mpi example compile 【发布时间】:2018-12-13 10:06:47 【问题描述】:

我打算使用boost_mpi,但是我在编译测试程序的时候出现了以下问题。

问题

/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_mpi.so: undefined reference to `ompi_mpi_info_null'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_mpi.so: undefined reference to `ompi_request_null'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_mpi.so: undefined reference to `ompi_mpi_packed'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_mpi.so: undefined reference to `ompi_mpi_comm_null'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_mpi.so: undefined reference to `ompi_mpi_errors_return'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_mpi.so: undefined reference to `MPI::Comm::Comm()'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_mpi.so: undefined reference to `ompi_op_set_cxx_callback'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_mpi.so: undefined reference to `ompi_mpi_cxx_op_intercept'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_mpi.so: undefined reference to `ompi_mpi_datatype_null'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_mpi.so: undefined reference to `ompi_mpi_comm_world'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_mpi.so: undefined reference to `ompi_mpi_unsigned_long'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_mpi.so: undefined reference to `ompi_mpi_group_empty'
collect2: error: ld returned 1 exit status
make[2]: *** [Test] Error 1
make[1]: *** [CMakeFiles/Test.dir/all] Error 2
make: *** [all] Error 2

其他信息

我的 libboost 是通过 apt-get install libboost-dev-all 安装的,版本号是 1.54。 我的 GCC 版本是 4.8.4,MPICH 版本是 3.2。

这是我的测试代码:

#include <boost/mpi.hpp>
#include <iostream>

int main(int argc, char *argv[])

    boost::mpi::environment envargc, argv;
    boost::mpi::communicator world;
    std::cout << world.rank() << ", " << world.size() << '\n';

【问题讨论】:

libboost_mpi.so 建立在 Open MPI 之上(例如 not MPICH)。您应该安装和使用基于 MPICH 构建的 boostmpi,或者安装和使用 Open MPI 如何安装基于 MPICH 的 boostmpi?我只是使用 apt-get install boost-all。 per ***.com/questions/12505476/… 没有这样的包,你应该重建 boostmpi,或者使用 Open MPI 【参考方案1】:

您使用的是哪个 Ubuntu 版本?上面看起来有点奇怪。看起来像一个非常旧的系统?

apt -y install libboost-mpi-dev libmpich-dev openmpi-bin

应该设置你就好了。 libboost-mpi-dev 不是 boost-all 的一部分。然后构建你的代码:

mpicxx -std=c++11 -o test test.cpp -lboost_mpi

您的代码在test.cpp 中。测试:

mpiexec -np 4 ./test

【讨论】:

Ubuntu 版本为 14.04。原因是我的 libboost_mpi.so 是建立在 openmp 而不是 mpich 之上的。 我明白了。但是你是如何安装所有东西的?使用apt? 为什么?只需运行上面的命令。更新了我的答案。在 14.04 上完美运行。 当“它工作”时使用哪个 MPI 库?米奇?打开 MPI 吗? @KavehVahedipour 如果您已阅读问题的 cmets,您会注意到您的答案不符合 OP 的需求,因此无需询问或抱怨您的答案是否被接受。

以上是关于boost mpi 示例编译的主要内容,如果未能解决你的问题,请参考以下文章

boost mpi 集合操作中的操作类型

MPI Fortran编译器优化错误[重复]

Windows 下配置Boost MPI

编译简单 boot_mpi 分散程序时出错:没有序列化元素

如何使用 Visual Studio 2010 在 Windows 上使用 Open MPI 构建 boost::mpi 库

Boost C++ 示例代码 - 静态编译错误