使用Bazel构建TensorFlow C++示例时找不到cuDNN库求助
解决TensorFlow C++示例label_image链接CUDA库失败的问题
我之前也碰到过这个一模一样的问题,当时折腾了好一阵才搞定,结合你提到的环境(TensorFlow r1.4、CUDA 8.0、cuDNN 6.0、Bazel 0.9.0),给你几个靠谱的解决方向:
1. 确保Bazel构建时能正确读取CUDA库路径
有时候Bazel会隔离系统环境变量,即使你已经导出了LD_LIBRARY_PATH,它也可能没正确继承。可以试试:
- 先确认环境变量配置正确:
输出里必须包含echo $LD_LIBRARY_PATH/usr/local/cuda/lib64,如果没有,先执行:export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH - 直接在构建命令中传入环境变量,强制Bazel使用:
LD_LIBRARY_PATH=/usr/local/cuda/lib64 bazel build //tensorflow/examples/label_image:label_image
2. 修改label_image的BUILD文件,显式指定链接路径
这是我当时解决问题的办法,直接在BUILD文件里给链接器指定CUDA库的路径和rpath,让它不用依赖系统环境变量:
找到/home/user/tensorflow_sources/tensorflow/tensorflow/examples/label_image/BUILD文件,修改cc_binary规则的linkopts字段:
cc_binary( name = "label_image", srcs = [ "main.cc", ], linkopts = [ "-L/usr/local/cuda/lib64", "-Wl,-rpath=/usr/local/cuda/lib64", ], deps = [ "//tensorflow/core:tensorflow", "//tensorflow/core:framework_internal", "//tensorflow/core:lib", ], )
保存后重新执行构建命令,链接器会直接从指定路径查找所需的CUDA库。
3. 检查CUDA和cuDNN库文件的存在性与权限
有可能是库文件没正确安装:
- 验证目标库是否存在:
ls -l /usr/local/cuda/lib64/libcudnn.so.6 /usr/local/cuda/lib64/libcufft.so.8.0 /usr/local/cuda/lib64/libcurand.so.8.0 - 如果某个库不存在,把cuDNN解压包中
lib64目录下的对应文件复制到/usr/local/cuda/lib64,然后执行ldconfig更新系统库缓存:sudo cp /path/to/cudnn/lib64/* /usr/local/cuda/lib64/ sudo ldconfig
4. 用Bazel的CUDA配置参数构建
TensorFlow的Bazel构建支持--config=cuda参数,它会自动处理CUDA相关的依赖路径,试试执行:
bazel build --config=cuda //tensorflow/examples/label_image:label_image
这些方法应该能解决你碰到的链接错误,优先试试修改BUILD文件或者指定环境变量构建的方案,大概率能搞定。
内容的提问来源于stack exchange,提问作者Furan
相关产品推荐
相关产品推荐

