本系列文章由 @yhl_leo 出品,转载请注明出处。

文章链接: http://blog.csdn.net/yhl_leo/article/details/51371936


整理一下最近遇到caffe工程的一些编译错误以及解决方法。

1 cuDNN

cuDNN当前最新版本是v5,近两三年的一些caffe工程,使用的版本不尽相同,其中以v2/v3版本的最为常见,所以使用的时候一定要搞清楚(当然如果作者没说,那就自己依次尝试吧)。

cuDNN出现版本不匹配,在工程make的时候,会报如下错误(以安装v4版本,编译v3版本的程序为例):

...

NVCC src/caffe/layers/deconv_layer.cu
NVCC src/caffe/layers/cudnn_conv_layer.cu
src/caffe/layers/cudnn_conv_layer.cu(81): error: argument of type "cudnnAddMode_t" is incompatible with parameter of type "const void *"
detected during instantiation of "void caffe::CuDNNConvolutionLayer<Dtype>::Forward_gpu(const std::vector<caffe::Blob<Dtype> *, std::allocator<caffe::Blob<Dtype> *>> &, const std::vector<caffe::Blob<Dtype> *, std::allocator<caffe::Blob<Dtype> *>> &) [with Dtype=float]"
(157): here ... 20 errors detected in the compilation of "/tmp/tmpxft_00002703_00000000-16_cudnn_conv_layer.compute_50.cpp1.ii".
make: *** [.build_release/cuda/src/caffe/layers/cudnn_conv_layer.o] Error 1
make: *** Waiting for unfinished jobs....

解决方案是这样的,下载v3版本,解压后,在终端进入所在文件夹下(这里仍然以v3版本为例):

$ cd lib64/
$ sudo cp lib* /usr/local/cuda/lib64/
$ cd ../include/
$ sudo cp cudnn.h /usr/local/cuda/include/
$ cd /usr/local/cuda/lib64/
$ sudo rm -r libcudnn.so libcudnn.so.7.0
$ sudo ln -sf libcudnn.so.7.0.64 libcudnn.so.7.0
$ sudo ln -sf libcudnn.so.7.0 libcudnn.so
$ sudo ldconfig

2 OpenCV

我使用的版本是3.1.0,在编译工程的时候,遇到如下BUG:

...

CXX/LD -o .build_release/tools/convert_imageset.bin
.build_release/lib/libcaffe.so: undefined reference to cv::imread(cv::String const&, int)’
.build_release/lib/libcaffe.so: undefined reference tocv::imencode(cv::String const&, cv::_InputArray const&, std::vector >&, std::vector > const&)’
.build_release/lib/libcaffe.so: undefined reference to `cv::imdecode(cv::_InputArray const&, int)’
collect2: error: ld returned 1 exit status
make: * [.build_release/tools/convert_imageset.bin] Error 1 ...

首先,我是已经配置过了opencv的,可以这样查询安装版本:

$ pkg-config --modversion opencv

因为编译好了,理所当然,输出结果是3.1.0

所以出现上面的错误,应该是opencv_imgcodecs链接的问题,比较有效的解决方案是,把opencv需要的lib添加到Makefile文件中,找到LIBRARIES(在PYTHON_LIBRARIES := boost_python python2.7 前一行)并修改为:

LIBRARIES += glog gflags protobuf leveldb snappy \
lmdb boost_system hdf5_hl hdf5 m \
opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

3 make

每次需要重新编译的过程中,首先需要清除掉以往编译的结果:

$ make clean

然后再重新编译:

$ make all -j12
$ make distribute
$ make pycaffe
$ make matcaffe

-j12的含义是run 12 jobs in parallel,看自己机器的性能,自己设置,可以更快编译。

最新文章

  1. C#开源实现MJPEG流传输
  2. CSS魔法堂:Reset CSS
  3. [C++] C\C++ printf 输出格式
  4. Eclipse中的快捷键总结
  5. 在线演示平台 | Highcharts中文网 (曲线图、区域图、3D图等等)
  6. TCP四种定时器--学习笔记
  7. Delphi通过Map文件查找内存地址出错代码所在行
  8. PL/SQL Developer 使用中文条件查询时无数据的解决方法
  9. 【网络流#2】hdu 1533 - 最小费用最大流模板题
  10. Javascript-one
  11. [USACO17JAN]Promotion Counting晋升者计数
  12. RabbitMQ服务端配置详解
  13. pair project elevator
  14. 18-10-16 IE 快捷键的组合方式
  15. JVM学习--内存分配策略(持续更新)
  16. B. Sleepy Game
  17. 关于django过滤器的使用
  18. ZOJ 1609 Equivalence(状压+dfs减枝)
  19. linux与windows 通过SecureCRT进行文件传输方式
  20. jQuery异步提交时显示正在加载的提示

热门文章

  1. TensorFlow alexnet在华为Mate10上运行方法
  2. AngularJS2.0 quick start——其和typescript结合需要额外依赖
  3. JSP-Runoob:JSP 过滤器
  4. ORACLE数据删除数据删除的解决办法
  5. IDEA Spark Streaming Flume数据源 --解决无法转化为实际输入数据,及中文乱码(Scala)
  6. C++ 指针 部分
  7. Objective-C copy(转)
  8. 51nod1565 FFT
  9. 【知识总结】扩展卢卡斯定理(exLucas)
  10. 【转】Linux之printf命令