前言:
本人先声明一下环境搭建所用到工具的版本号:
ubantu —— 16.04
opencv —— 3.2.0
gcc —— 5.4.0
protoc —— 2.6.1
本人先前一直用的CUDA8.0+CUDNN编译的caffe(第一篇blog写的就是),本篇blog主要用CPU对此进行编译,编译过程中出现很多问题,所以记录下来供以后查看复习。本人会把一些解决方法和总结的搭建环境的脚本无偿分享给广大爱学习的同学们。
注意:
在编译caffe之前,一定不要忘记修改Makefile.config文件,即:注释掉所有CUDA和CUDNN,打开CPU,修改位置给大家一并给出:
在CMakeLists.txt文件里添加设置CUDA为off,具体如下(17行):
一、make all 问题及解决办法
错误: /usr/bin/ld: cannot find -lopencv_imgcodecs
错误原因:这是opencv的一类错误。由于缺少opencv下的某些包,或安装 opencv后没有对它进行编译,导致的一些包的缺失。
解决办法:
首先用以下命令查看你的opencv库中都有哪些包以及是否包含报错信息提示中列出来的包,命令如下:
pkg-config --cflags --libs opencv
Tips:通过浏览发现,如果有,那么就是路径设置的问题,如果没有那就是opencv包的缺失问题,你就可以继续浏览本博文,本博文解决安装包缺失的问题。
>> a 安装opencv库,以及它所需要的所有相关的packges,本人整理成了一个脚本文件,你也可以选择性的安装:
#!/bin/bash
sudo apt-get -y install libopencv-dev build-essential cmake git libgtk2.0-de v pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-d ev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev li bswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10 -dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore -amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
安装完成后,再执行:
sudo apt-get update
>> b 如果此时 make clean 后再执行make all 还不能解决这个问题,那么你就需要下载opencv的源码,利用cmake进行编译生成搭建你环境所需要的makefile。(这么做的目的:opencv库所包含生成的所有可执行文件包都可以调用,只要你编译了你所需要的包,就不用再担心调用opencv时 No such file的相关问题出现)
过程如下:
编译建议:如果直接使用cmake进行编译的话,操作起来很不方便,本人推荐一个cmake的可视化工具——GUI
安装命令:
sudo apt-get install cmake-gui
>> 你的opencv需要包含以下文件以及自己建的 build空文件夹(本人用的opencv3.2.0):
>> 在opencv包的同级目录下,执行 cmake-gui 启动cmake可视化工具,如下所示:
>> 加载你的opencv源码绝对路径以及新建的build文件夹的绝对路径,并勾选你所需要的配置编译即可
注意:这里有个地方需要手动设置,分别是CMAKE_BUILD_TYPE 设置为 Release以及最终cmake 编译后安装的路径,这将影响你在编译caffe时调用的opencv包的调用路径(一般都在/usr/local下):
>> 接下来你就可以编译了:
make
>> 编译成功后,关掉你的GUI,并执行以下命令:
sudo make install
这将生成caffe所需要调用的so文件并存放到/usr/local的目录下。
注:如果编译不成功,报错信息会提示你可能缺少opencv的某个文件,这时可以重新开一个窗口sudo apt-get install *** 安装它所缺失的包就可以。
>> 最后一步一定不要忘记在你的存放目录下执行 :
sudo ldconfig
否则,你的caffe在make runtest时会报错。
二,make runtest 问题及解决办法
问题:error while loading shared libraries: libopencv_core.so.3.2
这类问题,只要按照一的方法步骤执行后一般不会出现,主要是sudo ldconfig 的执行与否。
对于这部分遇到的问题及解决方法,本人并没有完全写出,很大一部分原因是当时忘记做记录,如果按照这种方法执行后仍然没有解决你的问题,可以在博客下方给我留言(贴出自己的bug图片,讲明已搭建的环境并说明遇到的问题),本人看到后,如果有解决的方案一定会回复。