最开始时我想编译一个用cudnn库进行卷积操作的程序test.cu,我使用了如下编译命令:

nvcc test.cu -o test -lcudnn

结果提示我找不到cudnn.h在这里插入图片描述
这时使用find命令在系统中寻找cudnn.h的路径

sudo find / -name cudnn.h

找到路径为:
在这里插入图片描述
使用 -I(大写的i) + 上述路径来指定寻找头文件的目录,注意不要把文件名cudnn.h也加到路径中去了

nvcc test -o test -I/opt/conda/include/ -lcudnn

这时再编译又提示如下错误:
在这里插入图片描述
再用find来寻找cudnn.so的路径,注意寻找时要用libcudnn.so作为名字来寻找:

find / -name libcudnn.so

结果如下:
在这里插入图片描述
找到这个路径以后,在之前的基础上用-L + 路径来编译:

nvcc test.cu -o test -I /opt/conda/include -L/opt/conda/lib/ -lcudnn

这个时候可以生产目标文件test了,但是执行时依旧出错
在这里插入图片描述
使用ldd ./test查看缺少的动态链接库,结果如下,这里只截取了部分:但是可以看到libcudnn.so not found
在这里插入图片描述
解决方法是把libcudnn.so所在的库加入LD_LIBRARY_PATH环境变量中:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/conda/lib/

然后再用nvcc test.cu -o test -I /opt/conda/include -L/opt/conda/lib/ -lcudnn,再./test就可以运行了。但是终端关了以后这个环境变量又要再配了。

总而言之遇到头文件、库文件的缺失,如果这些文件确实在系统中存在的话,大致可以按照上述方法来尝试解决。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐