boost mpi を使用して、より複雑なデータ型を渡そうとしています。http://theboostcpplibraries.com/boost.mpi-simple-data-exchangeのサンプル コードを実装しています。
最初に、前述のチュートリアルの例 47.5 から機能する文字の配列として文字列を送信しようとします。コードは次のとおりです。
#include <boost/mpi.hpp>
#include <iostream>
int main(int argc, char *argv[])
{
boost::mpi::environment env{argc, argv};
boost::mpi::communicator world;
if (world.rank() == 0)
{
char buffer[14];
world.recv(boost::mpi::any_source, 16, buffer, 13);
buffer[13] = '\0';
std::cout << buffer << '\n';
}
else
{
const char *c = "Hello, world!";
world.send(0, 16, c, 13);
}
}
次のコマンドで問題なくコンパイルして実行できました。
mpic++ -std=c++0x 3.cpp -o 3 -lboost_mpi
mpiexec -np 3 ./3
次に、型を文字列に変更しようとしました (同じチュートリアルの例 47.5 から)。
#include <boost/mpi.hpp>
#include <boost/serialization/string.hpp>
#include <string>
#include <iostream>
int main(int argc, char *argv[])
{
boost::mpi::environment env{argc, argv};
boost::mpi::communicator world;
if (world.rank() == 0)
{
std::string s;
world.recv(boost::mpi::any_source, 16, s);
std::cout << s << '\n';
}
else
{
std::string s = "Hello, world!";
world.send(0, 16, s);
}
}
このコードをコンパイルしてリンクすると、次のエラーが発生しました。
> /usr/bin/ld: /tmp/ccRNu1AY.o: undefined reference to symbol '_ZTIN5boost7archive6detail14basic_iarchiveE'
> //usr/lib/x86_64-linux-gnu/libboost_serialization.so.1.54.0: error adding symbols: DSO missing from command line
> collect2: error: ld returned 1 exit status
どんな助けでも大歓迎です。