我尝试使用以下代码将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
任何帮助?
答案 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
标记访问。