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 示例编译的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Visual Studio 2010 在 Windows 上使用 Open MPI 构建 boost::mpi 库