完整报错
Could not load library libcudnn_cnn_train.so.8. Error: /home/ai/anaconda3/envs/ai/bin/../lib/libcudnn_ops_train.so.8: undefined symbol: _ZN5cudnn3ops26JoinInternalPriorityStreamEP12cudnnContexti, version libcudnn_ops_infer.so.8错误原因
该错误其实非常常见,属于小白常遇见的初级环境问题,不必太担心。此类报错基本是C++动态库丢失或者链接不上,只需要重新下载或者链接一下即可解决该类型报错。(保姆级教程,请一定耐心看完。)
分析报错信息
其实报错中也写的很明确了,报错告诉我们不能加载libcudnn_cnn_train.so.8
这个动态库。然而,一般安装环境C++动态库是默认安装在/usr/local/
路径下,当然有些读者有良好的习惯肯定会自己新建一个独立空的文件夹来存储这些依赖库,不过都可以用一下指令来找到所需要的动态库。
ldconfig -p | grep + 需要查到的库或者文本
那我们需要找的是报错中链接不上的libcudnn_cnn_train.so.8
,那我们就需要在终端输入
ldconfig -p | grep libcudnn_cnn_train.so.8
执行后可以看见红色框是它的路径:
还可以使用ldd
指令来看链接的动态库有哪些,将上一步的路径给复制下来:
ldd /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
结果如下图:
至此,我们大概明白了这个报错信息给我们了一些提示,要解决这个问题,就需要看报错中的第二句Error: /home/ai/anaconda3/envs/ai/bin/../lib/libcudnn_ops_train.so.8
,就是我们要用这个路径下的依赖库,但是无法加载,因为上述可以用指令查到有这个库(没有的就需要安装环境了),但是报错却说找不到,原因是因为它没有链接正确。
解决报错
要正确链接库很简单, 用ln -sf
指令既可。
首先,我们需要找到错的库文件的安装路径以及版本,还是上述步骤查找出来的路径,但是在最后加上*号用于查看安装的版本。
ls /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_train*
找到这个动态可的绿颜色的可执行文件:
然后用ln -sf
+ 绿颜色的可执行文件 + 报错信息中的路径 ,就可以链接上库了。
sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.6.0 /home/ai/anaconda3/envs/ai/bin/../lib/libcudnn_ops_train.so.8