2016-11-12 2 views
0

Я пытался использовать MPI с C++ увеличить, используя следующий код:Невозможно составить простой подталкивания MPI пример

#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; 
} 

И я подталкивание МПИ скомпилировать и установить:

~ 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 

Любая помощь?

ответ

1

Работы для меня (Ubuntu 16.04), если я просто добавлю -lboost_mpi.

Ваш код (по модулю незначительные изменения):

[email protected]:/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; 
} 
[email protected]:/tmp$ 

И мы просто скомпилировать с вышеупомянутой библиотеки (который mpic++ не знает по умолчанию)

[email protected]:/tmp$ mpic++ -o boostmpi boostmpi.cpp -lboost_mpi 
[email protected]:/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. 
[email protected]:/tmp$ 

Это помогает тот факт, что заголовки Boost и другие библиотеки имеют статус «система», т.е. доступны с дополнительными флагами -I или -L.

+0

это работает - и это заняло целый день компиляции и удаления и переустановки 'boost' ... возможно, я не вырезано, чтобы быть программным разработчиком вообще ... –

+1

Не отчаивайтесь, мы все были там. Ключ должен узнать ... из сообщений об ошибках от компилятора или, в этом случае, компоновщика –

Смежные вопросы