Проблема Boost.MPI - PullRequest
       17

Проблема Boost.MPI

2 голосов
/ 08 октября 2009

Я работаю над HPC. И на этом HPC была установлена ​​старая версия Boost, и эта библиотека Boost не имеет Boost.MPI. Я просил от администраторов установить его на HPC. Но они попросили меня установить его в моем домашнем каталоге. Так что я установил boost и boost.mpi в моем домашнем каталоге. Библиотека Boost, кажется, работает правильно. Но когда я пытаюсь запустить следующий код с помощью команды ниже, я получаю ошибки.

Тестовый код:

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

int main(int argc, char* argv[]) 
{
  mpi::environment env(argc, argv);
  mpi::communicator world;
  std::cout << "I am process " << world.rank() << " of " << world.size()
        << "." << std::endl;
  return 0;
}

Команда построения:

 mpiCC -I/home1/username/boost/include 
-I/usr/mpi/gcc/openmpi-1.2.8/include/
-L/home1/username/boost/lib 
-L/usr/mpi/gcc/openmpi-1.2.8/lib64/openmpi 
-lboost_mpi-gcc-mt-1_35  testboostmpi2.cpp

Я получил следующие крики:

testboostmpi2.o: In function `main':
testboostmpi2.cpp:(.text+0x59): undefined reference to     
`boost::mpi::environment::environment(int&, char**&, bool)'
testboostmpi2.cpp:(.text+0x63): undefined reference to 
`boost::mpi::communicator::communicator()'
 testboostmpi2.cpp:(.text+0x86): undefined reference to 
`boost::mpi::environment::~environment()'
testboostmpi2.cpp:(.text+0xb9): undefined reference to 
`boost::mpi::environment::~environment()'

Буду очень признателен, если кто-нибудь из вас сможет помочь.

Ответы [ 2 ]

3 голосов
/ 09 апреля 2010

Если вы используете g ++, вы можете попробовать использовать опцию компоновщика -Wl,--rpath.

mpiCC testboostmpi2.cpp -I/home1/username/boost/include-I/usr/mpi/gcc/openmpi-1.2.8/include/ \
    -L/home1/username/boost/lib -L/usr/mpi/gcc/openmpi-1.2.8/lib64/openmpi \
    -lboost_mpi-gcc-mt-1_35 -Wl,-rpath -Wl,/home1/username/boost/lib \
    -Wl,-rpath -Wl,/usr/mpi/gcc/openmpi-1.2.8/lib64/openmpi

Также для ссылки в правильном порядке необходимо указать исходный файл в качестве первого, а не последнего аргумента.

2 голосов
/ 24 ноября 2009

К сожалению, я использую Boost 1.41, поэтому точное сравнение невозможно. Однако я получил точно такие же ошибки, когда не включил -lboost_mpi (новое соглашение об именах библиотек). Итак, я бы проверил, правильны ли ваши каталоги и содержат ли вы то, что, по вашему мнению, они должны содержать.

...