我正在尝试向我的 Ubuntu 系统添加一个库文件夹。
我尝试用来更新系统的库文件夹是:/home/user/programs/elastix/lib
。
我尝试了以下操作:我首先检查了LD_LIBRARY_PATH
环境变量:
$ echo $LD_LIBRARY_PATH
/usr/local/cuda-9.0/lib64
而且它只包含 1 个文件夹 (?)。无论如何,我检查了一下ld.so.conf
:
$ cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
并将所有配置文件都包含在ld.so.conf.d
文件夹中。
-rw-rw-r-- 1 root root 38 Nov 24 2014 fakeroot-x86_64-linux-gnu.conf
-rw-r--r-- 1 root root 108 Jan 15 2018 i386-linux-gnu.conf lrwxrwxrwx 1 root root 41 May 15 2018 i386-linux-gnu_EGL.conf -> /etc/alternatives/i386-linux-gnu_egl_conf lrwxrwxrwx 1 root root 40 May 15 2018 i386-linux-gnu_GL.conf -> /etc/alternatives/i386-linux-gnu_gl_conf
-rw-r--r-- 1 root root 44 Jan 27 2016 libc.conf
-rw-r--r-- 1 root root 38 Nov 14 17:16 randomLibs.conf
-rw-r--r-- 1 root root 26 May 17 10:44 tensorflow_lib.conf
-rw-r--r-- 1 root root 68 Apr 15 2016 x86_64-linux-gnu.conf lrwxrwxrwx 1 root root 43 May 15 2018 x86_64-linux-gnu_EGL.conf -> /etc/alternatives/x86_64-linux-gnu_egl_conf lrwxrwxrwx 1 root root 42 Sep 14 17:16 x86_64-linux-gnu_GL.conf -> > /etc/alternatives/x86_64-linux-gnu_gl_conf
-rw-r--r-- 1 root root 56 Jan 15 2018 zz_i386-biarch-compat.conf
它包含 11 个配置文件。这看起来相当奇怪,因为 11 个(非空)配置文件的 1 个链接毫无意义。
我手动将该文件夹添加到ld.so.conf
文件中:
$ cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
/home/user/programs/elastix/lib
然后运行
$ sudo ldconfig
更新缓存。出现此错误消息,我猜也没有更新任何内容。
/sbin/ldconfig.real: /usr/local/cuda-9.0/lib64/libcudnn.so.7 is not a symbolic link
$ echo $LD_LIBRARY_PATH
/usr/local/cuda-9.0/lib64
使其工作的唯一方法是通过在控制台中专门添加文件夹:
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/user/programs/elastix/lib
$ echo $LD_LIBRARY_PATH
/usr/local/cuda-9.0/lib64:/home/user/programs/elastix/lib
那么,我的问题是这里发生了什么?为什么我的共享库没有使用更新ldconfig
,为什么我也只能看到 1 个文件夹LD_LIBRARY_PATH
?
根据这个邮政我可以将共享库移动到这些文件夹:
- /lib/
- /usr/lib/
- /usr/本地/lib/
并使其工作,但我想知道以前的方法存在什么问题。
顺便说一下,我正在使用 Ubuntu 16.04。
答案1
共享对象库有一个命名约定:
“真正的”库文件应该命名为libcudnn.so.7.0
。从该文件应该创建两个软链接:
$ sudo mv /usr/local/cuda-9.0/lib64/libcudnn.so.7 /usr/local/cuda-9.0/lib64/libcudnn.so.7.0
$ sudo ln -s /usr/local/cuda-9.0/lib64/libcudnn.so.7.0 /usr/local/cuda-9.0/lib64/libcudnn.so.7
$ sudo ln -s /usr/local/cuda-9.0/lib64/libcudnn.so.7.0 /usr/local/cuda-9.0/lib64/libcudnn.so
这允许使用 switch 调用编译器-lcudnn
。还ldconfig
接缝以验证此约定。另请参阅此(关联)。