在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. Java课程设计-随机密码生成器

    1.团队课程设计博客链接 团队课程设计博客地址 2.个人负责模板 随即密码生成器算法 3.自己的代码提交记录截图 4.自己负责模块或任务详细说明 负责随机密码算法设计实现 通过不同种类选择下生成密码, ...

  2. iOS内购 服务端票据验证及漏单引发的思考.

    因业务需要实现了APP内购处理,但在过程中出现了部分不可控的因素,导致部分用户反映有充值不成并漏单的情况. 仔细考虑了几个付费安全上的问题,凡是涉及到付费的问题都很敏感,任何一方出现损失都是不能接受的 ...

  3. java.lang.RuntimeException: java.sql.SQLException: Too many parameters: expected 0, was given 1 Quer

    如果出现类似这样的错误,检查一下是否sql语句和参数的位置对调了. java.lang.RuntimeException: java.sql.SQLException: Too many parame ...

  4. 鸟哥Linux学习笔记07

    1, vi 是 老式的文字处理器,不过功能已经很齐全了,但是还是有可以进步的地方. vim可以说是程序开发者的一项很好用的工具,vim官网(http://www.vim.org)自己也说vim是一个“ ...

  5. 根据HttpServletRequest获取用户真实IP地址

    原因: 当我们通过request获取客户端IP时,自身服务器通常会为了保护信息或者负载均衡的目的,对自身服务器做反向代理.此时如果我们通过request.getRemoteAddr();可能获取到的是 ...

  6. 方法--printStackTrace()

    java抛出异常的方法有很多,其中最常用的两个: System.out.println(e),这个方法打印出异常,并且输出在哪里出现的异常,不过它和另外一个e.printStackTrace()方法不 ...

  7. 编号中的数学_KEY

    题目描述: 从美国州际高速公路建筑者那里,奶牛们引进了一种路径编号系统,来给牧场之间的道 路编号.他们已经把 N(1<=N<=25)个牧场,用 1 到 N 的整数编号.现在他们需要将牧场间 ...

  8. spring boot / cloud (十八) 使用docker快速搭建本地环境

    spring boot / cloud (十八) 使用docker快速搭建本地环境 在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越 ...

  9. 原创:TSP问题解决方案-----禁忌搜索算法C实现

    本文着重于算法的实现,对于理论部分可自行查看有关资料可以简略参考该博文:http://blog.csdn.net/u013007900/article/details/50379135 本文代码部分基 ...

  10. Dubbo服务集群、服务启动依赖检查

    一.什么叫Dubbo服务集群 指把同一个服务部署到多台机器,然后通过Dubbo服务集群的容错配置实现一台机器的服务挂掉之后自动切换到另外的一台机器 二.Dubbo服务集群容错配置--集群容错模式 标签 ...