cmake: связывание программного обеспечения с boost::mpi (с mpich2)

Для этого простого кода (взято из документации boost-mpi):

#include <boost/serialization/string.hpp>
#include <iostream>
#include <string>
#include <boost/mpi.hpp>

namespace mpi = boost::mpi;

int main(int argc, char *argv[])
{
    mpi::environment env(argc, argv);
    mpi::communicator world;

    if (world.rank() == 0) {
      world.send(1, 0, std::string("Hello"));
      std::string msg;
      world.recv(1, 1, msg);
      std::cout << msg << "!" << std::endl;
    } else if (world.rank() == 1) {
      std::string msg;
      world.recv(0, 0, msg);
      std::cout << msg << ", ";
      std::cout.flush();
      world.send(0, 1, std::string("world"));
    };

  return 0;
};

И для таких CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(mpi-tests CXX)
FIND_PACKAGE(Boost 1.4 COMPONENTS mpi serialization REQUIRED)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(test ${Boost_LIBRARIES})

Он не может найти boost_mpi:

CMake Error at /usr/share/cmake/Modules/FindBoost.cmake:1135 (message):
  Unable to find the requested Boost libraries.
  Boost version: 1.47.0
  Boost include path: /usr/include
  The following Boost libraries could not be found:
          boost_mpi

Но! Я установил следующие пакеты:

boost-graph-mpich2
boost-mpich2
boost-mpich2-devel
boost-mpich2-python
mpich2
mpich2-devel

Почему не может найти? В Интернете есть множество примеров, когда люди используют FIND_PACKAGE (ТРЕБУЕТСЯ КОМПОНЕНТ Boost 1.4 mpi).


person m0nhawk    schedule 21.11.2011    source источник
comment
На какой ОС вы это запускаете?   -  person Kleist    schedule 22.11.2011
comment
Эм. 1.4 в find_package() кажется странным. Вы пробовали 1.47.0?   -  person arrowd    schedule 22.11.2011
comment
Это просто минимальная версия Boost, которую можно использовать. Он находит Boost version: 1.47.0. Переход на 1.47.0 не сработал. Я обнаружил, что boost-mpich2 устанавливает библиотеки в /usr/lib/mpich2/ (или /usr/lib64/mpich2/ для архитектуры x86_64). И, тем более, буст-библиотеки есть в /usr/{lib,lib64}/.   -  person m0nhawk    schedule 22.11.2011


Ответы (1)


Boost может быть установлен не в том месте, которое ищет модуль FindBoost. Вы можете указать префикс, в котором был установлен Boost, задав для переменной BOOST_ROOT префикс установки Boost.

К вашему коду я бы добавил:

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(mpi-tests CXX)
set( BOOST_ROOT "/path/to/boost/install/prefix" )
FIND_PACKAGE(Boost 1.4 COMPONENTS mpi serialization REQUIRED)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(test ${Boost_LIBRARIES})
person KlingonJoe    schedule 22.11.2011