Caffe 工程的一些编译错误以及解决方案
本系列文章由 @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,看自己机器的性能,自己设置,可以更快编译。
Caffe 工程的一些编译错误以及解决方案的更多相关文章
- Ubuntu 12.04.1 OK335xS busybox-1.24.1 文件系统编译错误及解决方案
Ubuntu OK335xS busybox- 文件系统编译错误及解决方案 一.参考文档: 编译busybox的一些错误: http://blog.csdn.net/hshl1214/article/ ...
- Oracle触发器编译错误及解决方案
错误 TRIGGER **** 编译错误 错误:PLS-00103: 出现符号 "END"在需要下列之一时: ( begin case declare exit ...
- minicsv库的编译错误与解决方案
有一个项目需要写csv文件以呈现数据.Github上有一个关于csv的轻量级读写库minicsv,于是下载之.但是编译example时出现了以下问题: In file included from ex ...
- 深度学习-Caffe中启用MatlabSupport编译出错的解决方案
一.如果编译前打算生成支持Matlab的库,则设置MatlabSupport为true之后. 二.记得添加Matlab的安装路径.我的是:D:\Application\DevTools\Matlab ...
- SDL2 程序 编译 错误 及 解决方案
main函数应写为int main( int argc, char* args[] )而不是int main()形式 链接库时应注意顺序 mingw32;SDL2main;SDL2; ...
- mac下编译cpu only caffe并用xCode建caffe工程
mac编译caffe 好像又变容易了,直接git clone下载blvc源码,make.config里去掉了CPU_ONLY前面的注释,并没有安装任何依赖,也可能是自己mac上本来有, xCode里调 ...
- ios开发问题:添加库和复制其它工程文件编译错误问题
首先添加库问题: 选择页签Build Phases->Link Binary With Libraries点+添加库 然后command+shift+k清除历史debug的垃圾 复制其它工程文件 ...
- xcode工程编译错误:No architectures to compile for
问题 开发环境:xcode6,iPhone6模拟器 xcode工程编译错误:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active ...
- (转载)SAPI 包含sphelper.h编译错误解决方案
[转]SAPI 包含sphelper.h编译错误解决方案 在使用Microsoft Speech SDK 5.1开发语音识别程序时,包含了头文件“sphelper.h”和库文件“sapi.lib”.编 ...
随机推荐
- 回顾2017Java 小结
一.Java语言最流行 最近,调查结果已公布:Java 被评为最流行的语言,JavaScript 是最常用的语言,而 Go 被认为是最有前途的语言,Python 是最多人想去尝试的语言. https: ...
- java网络编程TCP
图片来自网络 [服务端] import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; im ...
- 学学cookie和session
什么是Cookie? HTTP Cookie(也叫 Web Cookie或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器发起请求时被携带并发送到服 ...
- struts2标签---备忘录
<s:form action="sloginAction" method="post"> <s:textfield label="用 ...
- zoj3675 BFS+状态压缩
#include <stdio.h> #include <string.h> #include <queue> using namespace std; int n ...
- ACM_栈的压入、弹出序列
栈的压入.弹出序列 Time Limit: 2000/1000ms (Java/Others) Problem Description: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列 ...
- Elasticsearch之CURL命令的PUT和POST对比
PUT是幂等方法,而POST并不是. PUT用于更新操作,POST用于新增操作比较合适. PUT,DELETE操作是幂等的,所谓幂等就是指不管进行多少次操作,结果都一样. 比如,我用PUT修改一篇文章 ...
- Debug无效,不起作用
问题:debug调试时,红色断点空心,无效. 解决办法: 1.(工具 => 选项 =>调试 => 要求源文件与原始版本完成匹配 )去掉勾. 2.若是debug还是空心,不起作用,可以 ...
- android中textview单行显示,多余的省略
<TextView android:id="@+id/music_title" android:layout_width="wrap_content" a ...
- Android项目实战_手机安全卫士进程管理
###1.设备进程信息获取获取设备运行进程 ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVI ...