2013-02-08 122 views
5

我所面臨的問題已經解決了這裏: Loading shared library in open-mpi/ mpi-runMPI - 錯誤加載共享庫

我不知道怎麼樣,設置LD_LIBRARY_PATH或指定-x LD_LIBRARY_PATH修復的問題,當我安裝本身規定了必要的-L參數。我的安裝位於~/mpi/

我還包括了我的編譯鏈接配置。

$ mpic++ -showme:version 
mpic++: Open MPI 1.6.3 (Language: C++) 

$ mpic++ -showme 
g++ -I/home/vigneshwaren/mpi/include -pthread -L/home/vigneshwaren/mpi/lib 
-lmpi_cxx -lmpi -ldl -lm -Wl,--export-dynamic -lrt -lnsl -lutil -lm -ldl 

$ mpic++ -showme:libdirs 
/home/vigneshwaren/mpi/lib 

$ mpic++ -showme:libs 
mpi_cxx mpi dl m rt nsl util m dl % Notice mpi_cxx here % 

當我與mpic++ <file>編譯和mpirun a.out跑我得到了(共享庫)連接錯誤

error while loading shared libraries: libmpi_cxx.so.1: 
cannot open shared object file: No such file or directory 

錯誤已被固定設置LD_LIBRARY_PATH。問題是如何以及爲什麼?我錯過了什麼?當我的安裝看起來很好時,爲什麼需要LD_LIBRARY_PATH

回答

4

libdllibmlibrtlibnsllibutil都是必不可少的全系統的圖書館,他們來的非常基本的操作系統安裝的一部分。 libmpilibmpi_cxx是Open MPI安裝的一部分,在您的情況下,它們位於必須明確包含在鏈接器搜索路徑LD_LIBRARY_PATH中的非標準位置。

可以修改Open MPI編譯器包裝程序的配置,並使其將-rpath選項傳遞給鏈接程序。 -rpath獲取庫路徑並將其追加到列表中,該列表存儲在可執行文件內,該列表告知運行時鏈接編輯器(也稱爲動態鏈接器)在查詢變量之前在哪裏搜索庫。例如,在你的情況下,下面的選項就足夠了:

-Wl,-rpath,/home/vigneshwaren/mpi/lib 

這將嵌入可執行文件路徑裏面打開MPI庫,如果這條道路是在運行時或不LD_LIBRARY_PATH情況下它不會有問題。

做出了相應的包裝添加選項編譯器選項的列表中,你將不得不修改mpiXX-wrapper-data.txt文件(其中XXccc++CCf90等),位於mpi/share/openmpi/。例如,爲了使mpicc傳遞選項,你將不得不修改/home/vigneshwaren/mpi/share/openmpi/mpicc-wrapper-data.txt並添加以下到以linker_flags=開頭的行:

linker_flags= ... -Wl,-rpath,${prefix}/lib 

${prefix}被包裝膜當前的開放MPI的安裝路徑自動展開。

+0

確保您'LD_LIBRARY_PATH'不被overwitten在'.bashrc'像我一樣是使用CUDA。你想要的東西像'export LD_LIBRARY_PATH =/lib64/openmpi/lib:$ LD_LIBRARY_PATH' –

5

在我而言,我只是單純地追加

export LD_LIBRARY_PATH=/PATH_TO_openmpi-version/lib:$LD_LIBRARY_PATH 

到$ HOME/.bashrc文件。然後再次將其重新激活。

RK

+0

這是正確的! – caot

+0

找到它(例如在一個大集羣上)使用'whereis openmpi'。爲我工作。 – khaverim

+0

這工作 tnx這麼多 –