最开始时我想编译一个用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就可以运行了。但是终端关了以后这个环境变量又要再配了。
总而言之遇到头文件、库文件的缺失,如果这些文件确实在系统中存在的话,大致可以按照上述方法来尝试解决。