私が直面した問題はここで解決されました: open-mpi/mpi-runでの共有ライブラリの読み込み
インストール自体が必要な-L引数を指定している場合、LD_LIBRARY_PATH
を設定するか-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
が必要なのですか。
libdl
、libm
、librt
、libnsl
、およびlibutil
はすべて、システム全体に不可欠なライブラリであり、非常に基本的なライブラリの一部として提供されます。 OSのインストール。 libmpi
とlibmpi_cxx
はOpen 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.txt
ファイルを変更する必要があります(XX
はcc
、c++
、CC
、f90
など)、mpi/share/openmpi/
にあります。たとえば、mpicc
にオプションを渡すには、/home/vigneshwaren/mpi/share/openmpi/mpicc-wrapper-data.txt
を変更し、linker_flags=
で始まる行に以下を追加する必要があります。
linker_flags= ... -Wl,-rpath,${prefix}/lib
${prefix}
は、ラッパーによって現在のOpen MPIインストールパスに自動的に展開されます。
私の場合、単に追加するだけです
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
をソースします。
Ubuntuで次のコマンドを使用してmpich 3.2をインストールしました。
Sudo apt-get install mpich
mpiexecを使用してmpiプロセスを実行しようとすると、同じエラーが発生しました。
/home/node1/examples/.libs/lt-cpi: error while loading shared libraries: libmpi.so.0: cannot open shared object file: No such file or directory
LD_LIBRARY_PATHを設定しても問題は解決しませんでした。
私のマシンでファイル'libmpi.so.0'を検索しましたが、見つかりませんでした。 'libmpi.so.0'ファイルの名前が私のマシンでは'libmpi.so'であることを理解するのに少し時間がかかりました。そのため、名前を'libmpi.so.0'に変更しました。
それは私の問題を解決しました!
同じ問題が発生していて、apt-getを使用してライブラリをインストールした場合は、次の手順を実行します。
ファイル'libmpi.so'は場所'/ usr/lib /'にある必要があります。ファイルの名前を'libmpi.so.0'に変更します
mv /usr/lib/libmpi.so /usr/lib/libmpi.so.0
その後[〜#〜] mpi [〜#〜]ジョブは問題なく実行されるはずです。
'libmpi.so'が'/ usr/lib'で見つからない場合、次のコマンドを使用してその場所を取得できます。
whereis libmpi.so
まず、このコマンドを実行します
$ Sudo apt-get install libcr-dev
それでもこの問題が発生する場合は、LD_LIBRARY_PATHを次のように構成します。
export LD_LIBRARY_PATH=/usr/local/mpich-3.2.1/lib:$LD_LIBRARY_PATH
次に、この行の前に〜/ .bashrcに追加します。
[ -z "$PS1" ] && return