13

我遇到的问题已经在这里解决了: 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当我的安装看起来很好时需要。

4

5 回答 5

11

libdllibmlibrt和都是必不可少的系统范围的库,它们是非常基本的操作系统安装的一部分libnsl。并且是 Open MPI 安装的一部分,在您的情况下位于必须明确包含在链接器搜索路径中的非标准位置。libutillibmpilibmpi_cxxLD_LIBRARY_PATH

可以修改 Open MPI 编译器包装器的配置并使它们将-rpath选项传递给链接器。获取库路径并将其附加到存储在可执行文件中的列表中,该列表告诉运行时链接编辑器(也称为动态链接器)在查询变量-rpath之前在哪里搜索库。LD_LIBRARY_PATH例如,在您的情况下,以下选项就足够了:

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

这会将 Open MPI 库的路径嵌入到可执行文件中,并且该路径是否是LD_LIBRARY_PATH运行时的一部分并不重要。

要使相应的包装器将该选项添加到编译器标志列表中,mpiXX-wrapper-data.txt您必须修改位于. 例如,要通过该选项,您必须修改以下内容并将其添加到以 开头的行:XXccc++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 回答
2

我在 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
于 2019-07-07T01:20:22.743 回答
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
于 2018-04-09T19:51:00.623 回答
0

简单地运行

$ ldconfig

在我看来,这是解决问题的更好方法(取自对此问题的评论。特别是,因为它避免了LD_LIBRARY_PATH环境变量的误用。请参阅此处此处,了解为什么我认为它被滥用来解决手头的问题。

于 2019-01-16T14:45:20.420 回答