gpt4 book ai didi

linux - ctypes.util.find_library 是否符合 Linux 中的 "usual"库链接实践?

转载 作者:太空宇宙 更新时间:2023-11-04 10:11:16 26 4
gpt4 key购买 nike

最近遇到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,但从符号链接(symbolic link)层次结构来看,我预计会选择 6.0.21 版本。我的问题是:

  1. gcc(或 clang)工具链在编译时会采用哪个版本?
  2. C/C++ 可执行文件在运行时会选择哪个版本?
  3. 是否有任何类型的信息来源(文章、手册页、书籍等)明确包含前两个问题的答案?我尝试用谷歌搜索它,但没有找到任何确定的结果。

最佳答案

  1. 传统上,您会使用类似 gcc -lcudnn 的命令进行构建。这将找到指向 libcudnn.so.6libcudnn.so,后者指向 libcudnn.so.6.0.21。因此 libcudnn.so.6.0.21 将在构建时链接。

  2. 传统上,共享库将包含一个“SONAME”,它指示要在运行时加载的 ABI 兼容版本。我很确定在这种情况下会是 libcudnn.so.6。因此,针对 libcudnn.so.6.0.21 进行构建会给你一个对 libcudnn.so.6 的运行时依赖(你可以使用 ldd myprog | grep libcudnn 来验证这一点.so).

  3. 可能,但这不是 Stack Overflow 的主题问题(“推荐异地资源”)。

关于linux - ctypes.util.find_library 是否符合 Linux 中的 "usual"库链接实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48948889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com