无法编译简单的Boost MPI示例

时间:2016-11-12 23:08:23

标签: c++ boost

我尝试使用以下代码将MPI与C ++ Boost一起使用:

#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <iostream>
namespace mpi = boost::mpi;

int main()
{
  mpi::environment env;
  mpi::communicator world;
  std::cout << "I am process " << world.rank() << "on " << world.size() << "." << std::endl;
  return 0;
}

我已经编译并安装了mpi:

 ~ ls /usr/local/include/boost | grep mpi
mpi
mpi.hpp
~ ls /usr/local/lib | grep mpi   
libboost_mpi.a
libboost_mpi.so
libboost_mpi.so.1.62.0

 ~ ls /usr/local/lib | grep serialization                                                                                 
libboost_serialization.a
libboost_serialization.so
libboost_serialization.so.1.62.0
libboost_wserialization.a
libboost_wserialization.so
libboost_wserialization.so.1.62.0

使用

进行编译
mpic++ -L/usr/local/lib -I/usr/local/include/boost/mpi -lboost_mpi-gcc-mt-1_35 -lboost_serialization MPIBoostBindingExample.cpp -o MPIBoostBindingExample

但仍然有错误说:

/tmp/ccKVwnKR.o: In function `main':
MPIBoostBindingExample.cpp:(.text+0x27): undefined reference to `boost::mpi::environment::environment(bool)'
MPIBoostBindingExample.cpp:(.text+0x33): undefined reference to `boost::mpi::communicator::communicator()'
MPIBoostBindingExample.cpp:(.text+0x3f): undefined reference to `boost::mpi::communicator::size() const'
MPIBoostBindingExample.cpp:(.text+0x4d): undefined reference to `boost::mpi::communicator::rank() const'
MPIBoostBindingExample.cpp:(.text+0xb8): undefined reference to `boost::mpi::environment::~environment()'
MPIBoostBindingExample.cpp:(.text+0xeb): undefined reference to `boost::mpi::environment::~environment()'
collect2: error: ld returned 1 exit status

任何帮助?

1 个答案:

答案 0 :(得分:0)

如果我只是添加-lboost_mpi,那么适用于我(Ubuntu 16.04)。

您的代码(模数小编辑):

edd@max:/tmp$ cat boostmpi.cpp 
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <iostream>
namespace mpi = boost::mpi;

int main() {
  mpi::environment env;
  mpi::communicator world;
  std::cout << "I am process " << world.rank() 
            << " on " << world.size() << "." << std::endl;
  return 0;
}
edd@max:/tmp$ 

我们只是编译上面提到的库(mpic++默认不知道)

edd@max:/tmp$ mpic++ -o boostmpi boostmpi.cpp -lboost_mpi
edd@max:/tmp$ orterun ./boostmpi
I am process 2 on 4.
I am process 3 on 4.
I am process 0 on 4.
I am process 1 on 4.
edd@max:/tmp$ 

这有助于Boost标题和其他库具有&#39; system&#39;状态,即可通过其他-I-L标记访问。