13

私が直面した問題はここで解決されました: Loading shared library in open-mpi/ mpi-run

LD_LIBRARY_PATHインストール自体が必要な -L 引数を指定している場合、設定または指定-x LD_LIBRARY_PATHによって問題が修正される方法がわかりません。私のインストールは~/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

5 に答える 5

11

libdllibmlibrtlibnslおよびlibutilはすべて、システム全体に不可欠なライブラリであり、非常に基本的な OS インストールの一部として提供されます。libmpiおよびlibmpi_cxxOpen MPI インストールの一部であり、あなたの場合、リンカー検索パスに明示的に含める必要がある非標準の場所にありますLD_LIBRARY_PATH

Open MPI コンパイラ ラッパーの構成を変更し-rpathて、リンカーにオプションを渡すことができます。-rpathライブラリ パスを取り、それを実行可能ファイル内に保存されているリストに追加します。これにより、変数を参照する前にライブラリを検索する場所がランタイム リンカー (ダイナミック リンカー) に通知されLD_LIBRARY_PATHます。たとえば、あなたの場合、次のオプションで十分です。

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

これにより、Open MPI ライブラリへのパスが実行可能ファイル内に埋め込まれ、そのパスがLD_LIBRARY_PATH実行時に含まれるかどうかは問題になりません。

対応するラッパーがそのオプションをコンパイラ フラグのリストに追加するようにするmpiXX-wrapper-data.txtXXcc、. たとえば、オプションを渡すには、で始まる行に次を変更して追加する必要があります。c++CCf90mpi/share/openmpi/mpicc/home/vigneshwaren/mpi/share/openmpi/mpicc-wrapper-data.txtlinker_flags=

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

${prefix}ラッパーによって、現在の Open MPI インストール パスに自動的に展開されます。

于 2013-02-08T10:37:59.867 に答える
10

私の場合、単に追加するだけです

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

例えば

export LD_LIBRARY_PATH=/usr/local/openmpi-1.8.1/lib:$LD_LIBRARY_PATH

ファイルに$HOME/.bashrc保存してから、ソースを再度アクティブにしsource $HOME/.bashrcます。

于 2016-11-26T11:21:17.363 に答える