最近我遇到了Python函数ctypes.util.find_library
的问题。该函数用于按名称定位共享库;例如,CuPy使用它来定位cuDNN。在我的情况下,我安装了几个版本的cuDNN,并且它获取了最新版本(根据文档)。但是,目录的内容如下所示:
$ l /usr/local/cuda-8.0/lib64 | grep -i cudnn
lrwxrwxrwx 1 root root 13 Oct 3 08:21 libcudnn.so -> libcudnn.so.6*
lrwxrwxrwx 1 1000 users 17 Jul 27 2016 libcudnn.so.5 -> libcudnn.so.5.1.5*
-rwxrwxr-x 1 1000 users 79337624 Jul 27 2016 libcudnn.so.5.1.5*
lrwxrwxrwx 1 root root 18 Oct 3 08:21 libcudnn.so.6 -> libcudnn.so.6.0.21*
-rwxr-xr-x 1 1000 users 154322864 Apr 12 2017 libcudnn.so.6.0.21*
lrwxrwxrwx 1 root root 17 Oct 2 10:32 libcudnn.so.7 -> libcudnn.so.7.0.3*
-rwxrwxr-x 1 1000 1000 217188104 Sep 16 05:09 libcudnn.so.7.0.3*
-rw-r--r-- 1 1000 users 143843808 Apr 12 2017 libcudnn_static.a
即使最新版本是7.0.3,从符号链接层次结构来看,我也希望能够获得版本6.0.21。我的问题是:
gcc
(或clang
)工具链在编译期间会选择哪个版本?答案 0 :(得分:1)
传统上,您使用gcc -lcudnn
之类的命令进行构建。这会找到libcudnn.so
,其指向libcudnn.so.6
,指向libcudnn.so.6.0.21
。因此libcudnn.so.6.0.21
会在构建时链接。
传统上,共享库将包含一个" SONAME"表示要在运行时加载的ABI兼容版本。我非常确定在这种情况下会libcudnn.so.6
。因此,针对libcudnn.so.6.0.21
构建将为您提供libcudnn.so.6
的运行时依赖性(您可以使用ldd myprog | grep libcudnn.so
验证这一点。)
可能,但这不是Stack Overflow的主题问题("推荐非现场资源")。