虽然我使用ldconfig和/etc/ld.so.conf.d/lib.conf但找不到库

时间:2016-12-20 08:47:43

标签: shared-libraries dynamic-linking ldd openblas fedora-25

我正在使用 Fedora 25

我有一个需要多个库的二进制文件。二进制文件找不到libRblas.so

$ ldd XPore-Engine | less | grep not
libvtkRenderingAnnotation.so.1 => /usr/lib64/vtk/libvtkRenderingAnnotation.so.1 (0x00007fac12563000)
libRblas.so => not found
libRblas.so => not found
libRblas.so => not found

使用.conf文件正确配置库路径:

$ cat /etc/ld.so.conf.d/R-x86_64.conf
/usr/lib64/R/lib
$ ll /usr/lib64/R/lib
lrwxrwxrwx. 1 root root     11 dic 16 20:46 libopenblas.so.0 -> libRblas.so
lrwxrwxrwx. 1 root root     27 oct 31 21:16 libRblas.so -> /usr/lib64/libopenblas.so.0
-rwxr-xr-x. 1 root root 1989312 oct 31 21:16 libRlapack.so
-rwxr-xr-x. 1 root root  178856 oct 31 21:16 libRrefblas.so
-rwxr-xr-x. 1 root root 2911536 oct 31 21:16 libR.so

我使用ldconfig加载配置:

$ ldconfig -v | grep libRblas
        libopenblas.so.0 -> libRblas.so

但是,再次执行ldd后,它会返回相同的输出,说明找不到libRblas.so

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

我在https://bugzilla.redhat.com/show_bug.cgi?id=1404662的Read Hat Bugzilla错误跟踪系统中找到了Tom提供的解决方法。

  

是的,所以看起来R很完全使用libRblas.so作为> symlink到libopenblas.so.0,在外部,没有别的。   使用openblas的速度很快,因此解决方法是构建一个具有libRblas.so文件名和soname的openblas副本,并使用它而不是符号链接。我有一个新的openblas版本,增加了这个,然后我将做一个依赖它的新一轮R版本。

     

作为临时解决方法,您可以(以root身份)运行:   rm -f /usr/lib64/R/lib/libRblas.so   mv /usr/lib64/R/lib/libRrefblas.so /usr/lib64/R/lib/libRblas.so

     

这将恢复R提供的未经优化的libRblas.so。

     

哦,在移动libRrefblas.so之后运行/ sbin / ldconfig(以root身份运行),以便更新ldcache。