您的位置:首页 > Web前端

Caffe 工程的一些编译错误以及解决方案(undefined reference to cv::imread)

2016-10-02 16:17 387 查看
原文链接:http://blog.csdn.net/yhl_leo/article/details/51371936

在编译caffe时遇到了该博文的第二种情况,改正后可以正确执行:

(注意根据电脑情况可使用make all -j16)

整理一下最近遇到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
,看自己机器的性能,自己设置,可以更快编译。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  caffe
相关文章推荐