无法链接到现有的 libopenblas.so.0 DLL

Posted

技术标签:

【中文标题】无法链接到现有的 libopenblas.so.0 DLL【英文标题】:Cannot link to existing libopenblas.so.0 DLL 【发布时间】:2018-05-03 06:13:11 【问题描述】:

我需要在 C++ 中使用libpca,它依赖于Armadillo,而这又需要OpenBlas 和lapack。

我在安装/配置这些依赖项时遇到了一些问题。

我正在使用 Red Hat 4.8.5-16,并希望编写代码并调用 /my/dir/program/ 中的包。我没有 sudo 权限。

所有这些包都下载并解压到/my/dir/

这是我遵循的步骤:

1. to install OpenBlas
    /my/dir/OpenBLAS-0.2.20$  make
    /my/dir/OpenBLAS-0.2.20$  make PREFIX=/my/dir/program/
    <Step 1 is successful>

2. to install lapack
    /my/dir/lapack-3.8.0$ mv make.inc.example make.inc
    /my/dir/lapack-3.8.0$ make
    <Step 2 is successful>

3. to install Armadillo
    /my/dir/armadillo-8.500.0$ cmake . -DCMAKE_INSTALL_PREFIX:PATH=/my/dir/pgrogram/
    /my/dir/armadillo-8.500.0$ make
    /my/dir/armadillo-8.500.0$ make install
    <Step 3 is successful>

4. to compile the example code
    /my/dir/armadillo-8.500.0$ cp examples/example1.cpp /my/dir/program
    /my/dir/program$ export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64/:../OpenBLAS-0.2.20/:../armadillo-8.500.0/:./lib/:./lib64/:$LD_LIBRARY_PATH ;
    /my/dir/program$ g++ example1.cpp -o example1 -O2 -I./include -L./lib -L./lib64 -L../lapack-3.8.0 -L../OpenBLAS-0.2.20 -larmadillo -lopenblas -llapack  ;
    <There is no warning or error in compiling>

5. to run the example code
    /my/dir/program$ export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64/:../OpenBLAS-0.2.20/:../armadillo-8.500.0/:./lib/:./lib64/:$LD_LIBRARY_PATH ;
    /my/dir/program$ ./example1

返回

./example1:加载共享库时出错:libopenblas.so.0:不能 打开共享对象文件:没有这样的文件或目录

其实libopenblas.so.0 dll位于./lib/,我已经添加了DLL路径。

由于我没有 root 权限,我不能按照this 帖子的建议yum install openblas.x86_64 openblas-devel.x86_64

我该怎么办?

【问题讨论】:

让 g++ 找到libmkl_rt.so 是一回事。 ...运行./example1是一个新情况:位置信息必须重复:export LD_LIBRARY_PATH=/opt/intel.. .. ...:$LD_LIBRARY_PATH &amp;&amp; ./example1 我修改了命令,原来的错误消失了。现在它报告libopenblas.so.0,实际上位于./lib,找不到(参见更新的描述)。在运行./example1 之前,我已经将该路径添加到LD_LIBRARY_PATH,但错误仍然存​​在。如何解决这个问题? 查看我之前的评论:“export LD_LIBRARY_PATH=/opt/intel...”以“:$LD_LIBRARY_PATH”结尾。 IE。意味着您还包括所有系统 LD_LIBRARY_PATH 的。 它有效,谢谢!您的第一个回复实际上有效。我在一个 shell 文件中使用了export 并使用了bash-ed 它。然后执行 ./example1 导致错误。事实证明,export 和执行应该在同一个 shell 中。请粘贴您的解决方案作为答案,以便我接受。 【参考方案1】:

对于 g++ / ld 找到 libmkl_rt.so 是一回事。

运行./example1是一个新情况:“位置信息”必须重复→

export LD_LIBRARY_PATH=/opt/intel.. .. ...:$LD_LIBRARY_PATH && ./example1

请注意 export 命令是临时的:仅对当前 shell 会话有效。当您退出 shell 时,该命令被取消。

【讨论】:

以上是关于无法链接到现有的 libopenblas.so.0 DLL的主要内容,如果未能解决你的问题,请参考以下文章

ImportError: libopenblas.so.0: cannot open shared object file:No such file or directory

OSError: libopenblas.so.0: cannot open shared object file: No such file or directory解决

ImportError: libopenblas.so.0: cannot open shared object file: No such file or directory

jQuery Address 将新的深层链接附加到现有的深层链接

无法将熊猫数据框附加到现有的 Excel 工作表

CocoaPods 添加了一个新项目,但我无法将其添加到现有的 GitHub