2016-11-12 38 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; 
} 

而且我升壓MPI編譯和安裝:

~ 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

不要絕望,我們都已經那裏。關鍵是要從編譯器的錯誤消息中學習......或者在這種情況下是鏈接器 –