最近因为有项目要做,需要要在ubuntu下使用caffe,我的ubuntu版本是16.04,并且没有GPU,因此只能使用cpu版本的caffe。在百度上面输入关键字“ubuntu 16.04 caffe cpu 安装”,会发现有很多一些教程,其中还有自称靠谱的。我就以为很简单,结果我发现是我轻敌了。按照教程来一堆错误,主要是“对xxx…未定义的引用”。然后发现也有百度也有类似的错误,教程一个都不行。按照github上caffe下面的话题进行解决,也不行。整个弄了快两个星期,在快要放弃的时候终于成功。过程太煎熬了,由此写教程方便大家参考,也为了自己以后方便回想。
主要的坑是:gcc 版本、以及很多包不能通过apt-get install 的方法安装,只能自己手动编译,并且编译的gcc版本要一致,且与最后编译caffe时使用的gcc版本一致。
如下图所示,是我试过的所有方法,最后在第10条的时候终于make成功了!
下面我说一下具体的过程。
因为网上有各种版本的教程,涉及到的软件版本不同,而不同版本的特性也不相同,我测试了很多不同版本的包,在这里统一分享:
1. gcc、g++:4.9.3
2. protobuf:2.5.0
3. glog:0.3.3
4. gflag:v2.2.2(直接git clone就行)
5. lmdb:LMDB_0.9.24(直接git clone就行)
6. opencv:2.4.9
7. leveldb:1.18
8. boost:1.64.0
编号2-8的软件包都是我自己编译的,使用的是gcc 4.9.3编译的。其他的软件包,可以通过sudo apt-get install 安装。
首先,要保证的是,全程要使用同一版本的gcc和g++,同时要保证gcc和g++的版本一致。在这里,我使用的是gcc-4.9.3和g++ 4.9.3,为什么不使用gcc5呢,据说是caffe默认是gcc4编译的。而且由于gcc 4和gcc 5之间有区别,而刚好这个区别会对caffe的编译造成影响。因此,测试使用gcc 4.9.3,可以获得成功。(gcc 5的一些情况没有测试,读者可以自行测试)。在执行安装包命令:apt-get install之前,就要将gcc版本调好,gcc版本的升降也有很多教程,不赘述。
首先更新源:
sudo apt-get update
then,以下安装包可以通过命令进行简单的安装:
sudo apt-get install libsnappy-dev libopencv-dev libhdf5-serial-dev libatlas-base-dev
直接通过git clone来获取caffe(没有git工具的自行sudo apt-get install git):
git clone git://github.com/BVLC/caffe.git
我使用的是2.5.0,有帖子说要用2.6.1,可是2.6.1不能用gcc-4.9.3编译,可以用gcc-5编译,而2.5.0可以用gcc-4.9编译。
下载地址:protobuf 2.5下载
如果之前通过apt-get install 安装了,则通过apt-get autoremove libprotobuf-dev
卸载;
如果,之前手动编译过,则需要make clean
一下,同时使用which protoc
命令定位protoc位置,然后通过命令将其删除,如:sudo rm /usr/local/bin/protoc
,具体目录以实际运行结果为准。
将下载的安装包解压以后,接下来正式编译protoc:
cd protobuf
./autogen.sh
./configure --prefix=/usr
make
make check
sudo make install
sudo ldconfig
输出protobuf版本信息则表示安装成功
protoc --version
参照caffe官网上,针对ubuntu12.4的教程,如下:
按照这个来几乎没问题,如果有权限的问题,加上sudo就好了,或者设置文件的权限chmod 777 xxx/
;需要安装cmake,wget可以用git clone代替。
我安装的版本是2.4.9
(1)安装编译工具
sudo apt-get install build-essential
(2)安装依赖包
udo apt-get install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
(3)下载及编译
下载地址:https://opencv.org/releases.html
安装及编译命令:
cd opencv-2.4.19
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j4
sudo make install
注意:cmake指令中,最后两个“."必须要有,同时跟local之间有一个英文空格,输入指令时直接复制这个就行。
我使用的版本是leveldb1.18。参照安装博客:https://techoverflow.net/2012/12/14/compiling-installing-leveldb-on-linux/
主要的过程如下:
git clone https://code.google.com/p/leveldb/
cd leveldb
make
根据实际的目录来。最后,需要的是,需要自己手动建立链接:
cp --preserve=links libleveldb.* /usr/local/lib
cp -r include/leveldb /usr/local/include/
ldconfig
参照博客:https://blog.csdn.net/qq_20965753/article/details/77033300
早点没有参照这篇博客,导致走了很多弯路。
当以上的步骤结束以后,就可以编译caffe了。使用如下命令即可:
cd caffe
sudo make all -j8
以上,就完成了在ubuntu16.04 下caffe的cpu版本的编译,亲测可行。最主要的是弄清gcc版本,保持gcc版本一致,同时非常重要的是一些包需要手动编译。