在Ubuntu上编译安装caffe还是个比较蛋疼的事,有时候会莫名其妙的碰到很多库的问题,这篇文章就把我在Ubuntu上编译安装caffe的过程和遇到的问题大致记录一下。

1.安装opencv

http://machinelearninguru.com/computer_vision/installation/opencv/opencv.html

建议参考这篇文章,过程写得比较清晰

2.安装Matlab

因为我要用到matcaffe所以需要装matlab,这个过程可以参考:

http://blog.csdn.net/generallc/article/details/52793820

3.Python

建议安装anaconda,可以省很多事

4.一些依赖库安装

openblas:

  $ sudo apt update
$ apt search openblas
$ sudo apt install libopenblas-dev
$ sudo update-alternatives --config libblas.so.3
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

python 依赖库

cd /home/zzh/caffe/python
apt-get install python-pip
pip install --upgrade pip
for req in $(cat requirements.txt); do pip install $req; done

5.caffe编译

修改Makefile.config文件.

cd ~/caffe  //进入你的caffe目录
cp Makefile.config.example Makefile.config

我有用到gpu和opencv以及后面要matlab,所以我修改了下面这些:

USE_CUDNN:=1

USE_OPENCV:=1

MATLAB_DIR:=/home/liuhao/MATLAB/

python路径用的是anaconda的目录。

问题1: 这里需要修改一个地方,如果不改的话后面会碰到fatal error: hdf5.h:这个错误。

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

开始编译:

make all -j8

测试:

make runtest

python接口:

make pycaffe

Matlab接口:

make matcaffe
make mattest

6.可能遇到的问题

6.1 运行make mattest时可能会碰到下面这个错误:

MEX-file '/home/zzh/caffe/matlab/+caffe/private/caffe_.mexa64' 无效:

/usr/local/MATLAB/R2016b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6:

version `GLIBCXX_3.4.21' not found (required by

/home/zzh/caffe/matlab/+caffe/private/caffe_.mexa64)

解决方式是将matlab的libstdc++.so.6链接到系统的库文件。

sudo rm /usr/local/MATLAB/R2016b/sys/os/glnxa64/libstdc++.so.6

sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/local/Matlab/R2016a/sys/os/glnxa64/libstdc++.so.6

6.2 No module named google.protobuf.internal

这个问题会在python 中import caffe时遇到

sudo apt-get install python-protobuf

pip install protobuf

/home/username/anaconda2/bin/pip install protobuf

我的是用第一条命令搞定了

6.3 Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so.

这个也是在import caffe的时候碰到的。

conda install nomkl numpy scipy scikit-learn numexpr
conda remove mkl mkl-service

6.4 AttributeError: 'module' object has no attribute 'bool_'

这个就要把caffe/python目录加到系统路径里

export PYTHONPATH="/home/liuhao/framework/caffe/python:$PYTHONPATH"

可以把这个加到.bashrc里面

6.5 其他问题

Error 'fatal error: pyconfig.h: No such file or directory' when executing 'make pycaffe' on dev-branch

export CPLUS_INCLUDE_PATH=/usr/include/python2.7

中间还碰到过一个诡异问题,因为一个叫libharfbuzz.so.0的库弄得vim和桌面都挂了,解决的方式是重装了harfbuzz和freetype。可以参考 http://www.linuxfromscratch.org/blfs/view/svn/general/harfbuzz.html

还有个好像是cuda和gcc版本问题,直接注释/usr/include/host_config.h里面检测gcc版本的地方就可以了。

还有一些问题忘记了,具体再google吧一般都有人踩过的坑。

PS: 除了这种方式,还可以用cmake来装,这样就避免了手工去改Makefile.config文件。

10.27 update

支持多GPU要开启NCCL,

NCCL安装:

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

$ cd nccl

$ sudo make install -j4

在~/.bashrc中将NCCL加入

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/liuhao/framework/nccl/build/lib/"

遇到新问题:

caffe/proto/caffe.pb.h: No such file or directory

You need to generate caffe.pb.h manually using protoc as follows.

#In the directory you installed Caffe to
protoc src/caffe/proto/caffe.proto --cpp_out=.
mkdir include/caffe/proto
mv src/caffe/proto/caffe.pb.h include/caffe/proto

不过我是直接运行下面的命令可以了:

sudo apt-get remove libprotobuf-dev

Python.h找不到,config 文件里的python path检查一下

2017.11.1 update

error: /home/liuhao/anaconda2/lib/libpng16.so.16: undefined reference to `inflateValidate@ZLIB_1.2.9'

解决方式:自行编译zlib1.2.9

wget https://sourceforge.net/projects/libpng/files/zlib/1.2.9/
unzip xxx
cd xxx
./configure
make
sudo make install

欢迎关注公众号:vision_home 共同学习,不定期分享论文和资源

ubuntu16.04, Matlab2016b caffe编译安装的更多相关文章

  1. Ubuntu16.04 64位编译安装Hi3520D_SDK_V1.0.4.0

    1.复制uboot/tools/mkimage到环境变量路径 2.修改kernel/timeconst.pl,删除define 3.busybox makefile修改: /itc_work/hi35 ...

  2. ubuntu16.04源码编译安装nginx1.14.2

    1.下载nginx-1.14.2, 官网地址:nginx.org 2.解压nginx-1.14.2.tar.gz tar zxvf nginx-1.14.2.tar.gz 3.切到文件夹nginx-1 ...

  3. ubuntu16.04源码编译安装wine1.8.6安装不上引来的错误

    configure: libxcomposite 64-bit development files not found, Xcomposite won't be supported. configur ...

  4. [转]linux14.04下caffe的安装步骤

     linux14.04下caffe的安装步骤   原文地址:http://blog.csdn.net/xiaoyang19910623/article/details/52997481?locatio ...

  5. Ubuntu16.04下,erlang安装和rabbitmq安装步骤

    文章来源: Ubuntu16.04下,erlang安装和rabbitmq安装步骤 准备工作,先下载erlang和rabbitmq的安装包,注意他们的版本,版本不对可能会导致rabbitmq无法启动,这 ...

  6. Ubuntu16.04 LTS下apt安装WireShark

    Ubuntu16.04 LTS下apt安装WireShark 安装与配置 首先通过apt安装WireShark: $ sudo apt install wireshark 会同时安装许多的依赖包,其中 ...

  7. Ubuntu13.04 Eclipse下编译安装Hadoop插件及使用小例

    Ubuntu13.04 Eclipse下编译安装Hadoop插件及使用小例 一.在Eclipse下编译安装Hadoop插件 Hadoop的Eclipse插件现在已经没有二进制版直接提供,只能自己编译. ...

  8. 路由器安装ubuntu-16.04.1-server-amd64出现“无法安装busybox-initramfs”错误。向目标系统中安装busybox-initramfs软件包时出现一个错误。请检查/var/log/syslog或查看第四虚拟控制台以获得详细

    公司的路由器要ubuntu服务器进行路由网络功能的管理,在安装的时候出现下面的错误提示: 安装ubuntu-16.04.1-server-amd64出现“无法安装busybox-initramfs”错 ...

  9. ubuntu16.04下sublime text3安装和配置

    ubuntu16.04下sublime text3安装和配置 2018年04月20日 10:31:08 zhengqijun_ 阅读数:1482 1.安装方法 1)使用ppa安装 sudo add-a ...

随机推荐

  1. 201521123023《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...

  2. 今天的第一个程序-南阳acm输入三个数排序

    #include<stdio.h>main(){    int a,b,c,t;    scanf("%d%d%d",&a,&b,&c);    ...

  3. webservice第三篇【接口开发webservice、CXF框架使用、IDEA下使用webservice、小例子】

    实现接口的webservice 服务端 import javax.jws.WebService; /**面向接口的webservice发布方式 * * */ @WebService public in ...

  4. Kafka水位(high watermark)与leader epoch的讨论

    ~~~这是一篇有点长的文章,希望不会令你昏昏欲睡~~~ 本文主要讨论0.11版本之前Kafka的副本备份机制的设计问题以及0.11是如何解决的.简单来说,0.11之前副本备份机制主要依赖水位(或水印) ...

  5. 使用VUE模仿BOSS直聘APP

    一.碎碎念: 偶尔在群里看到一个小伙伴说:最近面试的人好多都说用vue做过一个饿了么.当时有种莫名想笑. 为何不知道创新一下?于是想写个DEMO演练一下.那去模仿谁呢?还是BOSS直聘(跟我没关系,不 ...

  6. day20<IO流>

    IO流(IO流概述及其分类) IO流(FileInputStream) IO流(read()方法返回值为什么是int) IO流(FileOutputStream) IO流(FileOutputStre ...

  7. 【京东详情页】——原生js爬坑之放大镜

    一.引言 在商城的详情页中,放大镜的功能是很常见的.这里京东详情页就要做一个仿放大镜的效果,预览如下: 二.实现原理 实际上,放大镜的实现是单纯用几个div,鼠标移入其中一个小图div,触发事件显示另 ...

  8. Kindle 推送教程:教你用电子邮箱推送电子书

    Kindle 推送是什么意思?如何通过电子邮件附件推送?或许刚刚接触 Kindle 的朋友对这个概念不是很清楚,其实所谓 Kindle 推送是指亚马逊提供的一个"Kindle 个人文档服务& ...

  9. Rectangles hdu2461容斥定理

    Rectangles Time Limit: 5000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  10. poj2891非互质同余方程

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 8176   ...