我遇到的问题在这里得到了解决: Loading shared library in 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
。
答案 0 :(得分:7)
就我而言,我只是简单地追加
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
。
答案 1 :(得分:5)
libdl
,libm
,librt
,libnsl
和libutil
都是基本的系统级库,它们是非常基本的操作系统安装的一部分。 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
的{{1}},f90
等)。例如,要使mpi/share/openmpi/
通过该选项,您必须修改mpicc
并将以下内容添加到以/home/vigneshwaren/mpi/share/openmpi/mpicc-wrapper-data.txt
开头的行中:
linker_flags=
linker_flags= ... -Wl,-rpath,${prefix}/lib
由包装器自动扩展到当前的Open MPI安装路径。
答案 2 :(得分:1)
我在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 作业应该可以正常运行。
如果在'/ usr / lib'中找不到'libmpi.so',则可以使用以下命令获取其位置。
whereis libmpi.so
答案 3 :(得分:0)
首先,运行此命令
$ 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
答案 4 :(得分:0)