2013-02-08 28 views
5

エラー読み込み共有ライブラリ: Loading shared library in open-mpi/ mpi-runMPI - 私が直面した問題は、ここで解決されている

私は知らないどのように、LD_LIBRARY_PATHを設定するか、私のインストール自体は必要-L引数を指定した場合、-x LD_LIBRARY_PATH修正問題を指定します。私のインストールは~/mpi/

です。コンパイルリンクの設定も含まれています。

私は mpic++ <file>してコンパイルし、私は(共有ライブラリ)を得た mpirun a.outで走った
$ 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 % 

リンカエラー

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は、すべての必須システム全体のライブラリであり、彼らは非常に基本的なOSのインストールの一部として来ます。 libmpilibmpi_cxxはOpen MPIインストールの一部であり、あなたのケースではリンカ検索パスLD_LIBRARY_PATHに明示的に含まれていなければならない非標準の場所にあります。

Open MPIコンパイララッパーの構成を変更して、-rpathオプションをリンカーに渡すことができます。 -rpathは、ライブラリパスを受け取り、実行可能ファイル内に格納されたリストに追加します。このリストは、実行時リンクエディタ(a.k.a.ダイナミックリンカ)に、LD_LIBRARY_PATH変数を参照する前にライブラリを検索する場所を指示します。たとえば、あなたのケースでは、以下のオプションが十分であろう:

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

これは、実行可能な内部オープンMPIライブラリへのパスを埋め込むだろうし、そのパスが実行時にかLD_LIBRARY_PATHの一部である場合、それは問題ではないでしょう。 (XXccc++CCf90、などである。)

は、対応するラッパーはコンパイラフラグのリストにそのオプションを追加作成するには、 mpi/share/openmpi/にある、 mpiXX-wrapper-data.txtファイルを変更する必要があります。例えば、 mpiccはオプションを渡す作るために、あなたは /home/vigneshwaren/mpi/share/openmpi/mpicc-wrapper-data.txtを変更し、 linker_flags=で始まる行に以下を追加する必要があります:

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

${prefix}自動的に現在オープンMPIのインストールパスにラッパーによって展開されます。私の場合は

+0

鉱山は、CUDAとあったように、あなたの 'LD_LIBRARY_PATH'があなたの' .bashrc'にoverwittenされていないことを確認してください。 'export LD_LIBRARY_PATH =/lib64/openmpi/lib:$ LD_LIBRARY_PATH'のようなものが欲しい –

5

、私はただ単に$ HOME/.bashrcファイルに

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

を追加します。それを再びアクティブにすることができます。

RK

+0

これは正しいです! – caot

+0

(例えば、大きなクラスタ上で)それを見つけるには 'whereis openmpi'を使います。私のために働いた。 – khaverim

+0

これはうまくいった tnx –

関連する問題