ubuntu编译caffe时make all不通过的一些问题总结

本文根据我编译时出现的一些错误,参考了swfa1的csdn博客《caffe编译中的python问题》http://www.th7.cn/Program/Python/201609/967571.shtml 和ThinkingMan新浪博客《Ubuntu14.04编译caffe问题记录》http://blog.sina.com.cn/s/blog_721a75e50102wfig.html,做的一些记录,以便以后备用。

系统环境做一下说明:

ubuntu14.04LTS,CUDA 8.0,  cudnn 5.0, caffe :官方发布的caffe

(后来实验配置环境多了,发现问题大同小异,上述系统版本号是我第一次配置时的系统信息,不一定必须遵循,只要你的Ubuntu 和cuda,cudnn 版本号对应就行,这个对应关系网上可以查到,在此就不复制了)。

错误1:

/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libopencv_highgui.so: undefined reference to `TIFFReadRGBAStrip@LIBTIFF_4.0'

collect2: error: ld returned 1 exit status

make: *** [.build_release/tools/convert_imageset.bin] Error 1

错误描述:如上图显示,未定义的引用“TIFFReadRGBAStrip@LIBTIFF_4.0”,说明是libtiff库未指明,

解决办法:执行下面命令操作查找对应库路径,并添加

$ldconfig -p|grep libtiff #这个指令是查找库索引

下图是我查找到的链接关系

$ export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu/ #这个指令是将路径添加至配置文件中

然后再编译make all,就可以继续进行下面测试了。

$make clean # 清理上次编译错误记录

$make all -j8

问题2:

/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or directory # include^

compilation terminated.

make: *** [.build_release/src/caffe/layer_factory.o] Error 1

make: *** Waiting for unfinished jobs....


错误描述:这个是因为cplus文件索引路径错误问题,我安装caffe是用的是anaconda2,一些路径出了问题,将python对应路径添加进去就好

解决办法:如下

$export CPLUS_INCLUDE_PATH=/usr/include/python2.7

然后再编译make all,就可以继续进行下面测试了。

$make clean# 清理上次编译错误记录

$make all -j8


2017/10更新:

问题描述:前一段时间服务器又歇菜了,项目组的同学重装系统后,发现正常步骤安装caffe后,老是找不到pyconfig.h文件,也就是上面这个问题。可是检查的时候路径,环境变量什么都没问题。后来又把caffe卸了重装好几次,还是这个问题。今早又重新装载的时候,git clone 时,报下面这个错:

以前一直以为是权限问题,没想太多,直接指令前面加sudo执行了。后来查了一下这个问题,在这篇博客(http://blog.csdn.net/superior_yong/article/details/62041526)中提到了这个问题,并给出了解决方案。如下图。

问题分析:好吧,那我查看一下我的根目录下的.config文件夹,发现我的这个文件加的所有者是root。可能是这个原因,跨权限调用文件的原因,造成后面的一系列编译错误吧。

解决办法:

参照这篇博客(http://www.linuxidc.com/Linux/2015-03/114695.htm),我把文件夹所有者改了回来,编译发现没有错了,都通过了。

3.错误

ImportError: No module named Cython.Distutils

解决办法:

安装Cython

$sudo apt-get install cython

4错误

make pycaffe后,还有一些库找不到,我自己测试,这个问题也适用于基于CAFFE 平台的的其他神经网络,例如py-faster-rcnn和py-R-FCN等。

(参考这篇博客http://www.cnblogs.com/venus024/p/5664103.html)

解决办法:

$cd caffe/python

$for req in $(cat requirements.txt); do pip install $req; done

caffe/python/requirements.txt这个文件记录caffe的Python接口所需要的所有函数库,执行上面语句便可依次检查是否所需模块都安装,有的话自动跳过或升级,没有的话自动安装。

5错误

由于服务器桌面系统经常崩盘,找售后他们又重装了系统,所以所有的环境得重新配置。执行make all 时,发现了下面的错误。经排查发现是cudnn安装配置错误。


查到,博客http://blog.csdn.net/u011070171/article/details/52292680,给的解释说,这是因为当前版本的caffe的cudnn实现与系统所安装的cudnn的版本不一致引起的。上官网查了了一下caffe对cuda相关要求,显示如下:


以上判断是caffe版本过旧,cudnn版本太新。下面就对症下药:

解决办法1:(博客中给的办法)

1.将./include/caffe/util/cudnn.hpp 换成最新版的caffe里的cudnn的实现,即相应的cudnn.hpp.

2. 将./include/caffe/layers里的,所有以cudnn开头的文件,例如cudnn_conv_layer.hpp。  都替换成最新版的caffe里的相应的同名文件。

3.将./src/caffe/layer里的,所有以cudnn开头的文件,例如cudnn_lrn_layer.cu,cudnn_pooling_layer.cpp,cudnn_sigmoid_layer.cu。

都替换成最新版的caffe里的相应的同名文件。

rbgirshick的py-faster-rcnn实现,因为其cudnn实现为旧版本的实现,所有出现了以上问题.


解决办法2:(降低cudnn版本)

将之前安装的/usr/local/cuda-8.0/l路径下的cudnn的文件删除,按照网上教程重新安装v5.0版,文件关联一下,就好

解决办法3:(更换新版本的caffe)

去github上下载新版的caffe,把caffe重新按照官方教程安装配置一遍。

6错误

运行make runtest,一直报错

Checkfailed:status== CUDNN_STATUS_SUCCESS (3vs.0)  CUDNN_STATUS_BAD_PARAM

错误描述:按照http://www.cnblogs.com/penguinliong/p/6351215.html这篇博客说是GPU被占用,可是我运行$nvidia-smi查看显示,说没有进程调用GPU,经排查还是cudnn的安装问题,因为服务器是多人在使用,被别人装了两个版本的cudnn。

解决办法:删掉一个cudnn,重新安装配置连接,然后再编译make all,就可以继续进行下面测试了。

$make clean# 清理上次编译错误记录

$make all -j8

7错误

今天在给师姐装caffe时,遇到了Python接口无法调用的问题,具体问题描述如下:

按照正常安装步骤,执行$make all,$make test , $make runtest ,$make pycaffe都正常。但是$Python打开Python编译器后,执行import caffe调用caffe的Python接口是出现错误:No module named _caffe,网上查找大部分解释说是 make pycaffe 编译出错,没有正确生成Python脚本文件。

解决办法:

$make clean# 清理上次编译错误记录

sudo 超级用户权限重新执行上面make all ,make pycaffe指令。

需要注意的是,如果错误是 no module named caffe ,可能是你的caffe路径配置错误,执行下面命令,将caffe/python/环境变量路径添加.bashrc文件中。

$sudo vim ~/.bashrc #打开.bashrc文件

在文件最后添加下面指令

export PYTHONPATH=/home/(你的用户名)/caffe(你的caffe安装目录)/python:$PYTHONPATH#这里也可以使用~/caffe/pyhon相对路径

关闭文件, 输入下面指令,是环境变量生效,

$source ~/.bashrc


然后,在Python编译器中import caffe,测试应该可以正常调用caffe。

8错误

还是上面的接口问题,按照错误7解决no module问题后,再次测试出现新的错误如下:


错误描述:如上图最后一行所示,显示运行时错误,网上找问题说是numpy错误。

解决办法:更新numpy模块,执行下面语句更新。

$sudo pip install numpy --upgrade

9错误

环境配置好后,做手写体网络测试,执行 (在caffe安装目录下)

$sudo examples/mnist/train_lenet.sh

出现如下错误


问题描述:出现这种错误是由于训练数据没有准备好。

解决办法:(以下命令都在caffe安装目录下执行)

$.data/mnist/get_mnist.sh#准备数据

$.examples/mnist/create_mnist.sh#生成caffe指定数lmdb据格式

$.examples/mnist/train_lenet.sh#训练模型

更复杂的情况看https://github.com/BVLC/caffe/issues/2709

其他问题以后发现继续补充。

2017/10更新:

10错误:/usr/include/boost/property_tree/detail/json_parser_read.hpp:257:264: error: ‘type name’ declared as function returning an array

问题描述:执行ssd环境配置时出现上述错误。

根据这篇博客http://blog.csdn.net/u010733679/article/details/52125597上说是gcc版本过低

问题解决:按照上述博客所说升级一下gcc。



11错误:执行create_data.sh时报错,如下图。

问题分析:上网查找说是numpy数据包版本过低。

问题解决:执行命令$sudo pip install -U numpy升级一下numpy数据包

12错误:继问题11numpy版本错误问题后,执行create_data.sh 报如下错误:


问题分析:综上问题描述,还是python库没安装全

问题解决:按照问题4解决办法执行一次,解决问题。



13错误:

fatal error:gflags/gflags.h:No such file or directory

如下图所示。

解决办法:

参考网上教程https://blog.csdn.net/artprog/article/details/79271388,输入下面指令:

sudo apt-get install libgflags-dev

14错误:

fatal error:glog/logging.h:No such file or directory

如下图所示。

解决办法:

参考网上教程https://blog.csdn.net/artprog/article/details/79271388,输入下面指令:

sudo apt-get install libgoogle-glog-dev

15错误:

fatal error: cblas.h: No such file or directory

如下如所示。

解决方法:

sudo apt-get install libblas-dev

16错误:

fatal error: hdf5.h: No such file or directory

解决方法:

修改Makefile.config文件,定位到INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include,在后面加上/usr/include/hdf5/serial:

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib后面加上 /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

修改为:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial

17错误:

/usr/bin/ld: cannot find -lcblas

/usr/bin/ld: cannot find -latlas

collect2: error: ld returned 1 exit status

解决方法:

sudo apt-get install libopenblas-dev

18错误:

fatal error: lmdb.h: No such file or directory

解决办法:

sudo apt-get install liblmdb-dev

19错误:

nccl.h: No such file or directory

错误原因:

因为需要多GPU支持训练,在多个 GPU 上运行 Caffe 需要使用 NVIDIA NCCL。

解决办法:

参照CUDA官网的教程https://www.nvidia.cn/object/caffe-installation-cn.html

$ git clone https://github.com/NVIDIA/nccl.git

$ cd nccl

$ sudo make install -j4

NCCL 库和文件头将安装在 /usr/local/lib 和 /usr/local/include 中



2019/1/8

因为一些原因,新来的笔记本重新安装了caffe,这次出现了新的问题。

20错误:

编译$make pycaffe生成python的caffe接口时,报错找不到python.h文件。

错误原因:

因为编译make 之前,Makefile.config文件中python 路径指定错误。

解决办法:

1.执行命令$whereis python, 可以查看python的绝对路径,然后修改Makeifle.config中的PYTHON_INCLUDE的文件路径。

2.执行$make -j8,重新编译caffe.

3.执行$make pycaffe,生成caffe的python接口即可。



2019/1/25

这次出现的错误是:google/protobuf/arena.h找不到

21错误:

.build_release/src/caffe/proto/caffe.pb.h:22:35: fatal error: google/protobuf/arena.h: 没有那个文件或目录

错误分析:

参考博客:https://blog.csdn.net/qq_33144323/article/details/81259985,可知是protobuf版本冲突问题。caffe能正确使用的是protobuf-2.6.1版本。

我装了ananconda3,其自带的protobuf版本要高于caffe的需求版本,而ubuntu自带的protobuf版本符合。

解决办法:

依据上面博客,既可以强制更改protobuf降版本,也可以暂时关闭ananconda环境,安装。

我的ananconda安装的是我的当前路径,没有装到系统环境中,我采用了偷懒的办法,使用sudo权限,跳到ubuntu系统环境下编译,其实相当于屏蔽anaconda环境编译,这样可以在最大保证不改变其他环境配置的前提下能够编译通过,不过这样付出的代价的是后面的pycaffe接口和matcaffe接口,同样需要执行sudo权限编译。




2019/12/12

22错误

/usr/bin/ld: cannot find -lcblas

/usr/bin/ld: cannot find -latlas

collect2: error: ld returned 1 exit status


错误分析

这次出现的错误是第错误17,但是按照错误17的解决方法,仍不能解决问题,查看caffe安装教程(网址为:http://caffe.berkeleyvision.org/installation.html)发现需要更改 Makefile.config中变量设置。如图所示。


解决办法:

在错误17的解决方法的基础上,修改Makefile.config中变量设置,将BLAS值设置为open。

推荐阅读更多精彩内容