Как отправить строковый тип с boost_mpi?

Я пытаюсь передать более сложные типы данных, используя MPI Boost. Я реализую примеры кодов в 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

Любая помощь будет принята с благодарностью.

1 ответ

Решение

Вы можете добавить опцию компилятора:

-lboost_serialization

Другие вопросы по тегам