Caffe环境这是第四次配了,第一次是CPU版本,比较简单,很容易就配成功了。后面两次是GPU版本,但总有一堆问题。这次边配环境边记录下来,如果再遇到问题也好查找。版本说明如下:
Caffe: CUDA8.0 + cuDNN8.0 + OpenCV3.1.0 + Python2.7 + Matlab2014b + blas(mkl)
1.重装系统
(这一步简单,就省略了。其中有一步preparing to install Ubuntu,卡了有20分钟左右,好像是因为硬盘没有先格式化。我没有试,反正有时间,等着就好了。)
2. 安装五笔输入法
由于要边配边记录,所以就先安装输入法了。
sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4
im-switch -s ibus
sudo apt-get install ibus-table-wubi
killall ibus-daemon
ibus-daemon -drx
第一条语句是安裝IBus框架,有些版本自带了框架,则不需要安装。
第二条语句是启动IBus框架。(安装的时候提示im-switch: command not found
,原来是现在改成了im-config,然后在选项中选择ibus。)
第三条语句是安装五笔引擎。
第四条重启IBus输入法框架:Kill掉ibus进程(如果ibus没有运行,会显示:
ibus-daemon: no process found
然后
输入ibus-daemon -d
就出来了。)
第五条重启IBus输入法框架:重启进程
3. 装显卡驱动。
显卡型号:GTX950。
查看显卡型号:
lspci | grep VGA
再进入nvidia官网搜索对应的驱动版本。
由于命令行安装比较容易,所以采用命令行安装。
开始安装:
首先按住ctrl+Alt+F1进入文字界面,然后执行以下语句:
sudo apt-get purge nvidia-*
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-370
sudo reboot
重启后执行:
nvidia-smi
出现以下界面:
则代表显卡驱动安装成功。
顺便说一下截图功能:
进入System Settings--Keyboard--Shortcuts--Screenshots
我设置的:
选中的那个是Alt+print
gnome-screenshot -h
用来查看这些快捷方式
4. cuda8.0安装
简介:
CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台CUDA?是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。开发人员现在可以使用C语言来为CUDA?架构编写程序,C语言是应用最广泛的一种高级编程语言。所编写出的程序于是就可以在支持CUDA?的处理器上以超高性能运行。CUDA3.0已经开始支持C++和FORTRAN。
文件可在https://developer.nvidia.com/cuda-downloads下载。
参考www.itdadao.com/articles/c15a234199p0.html安装。
下载完后进入目录:
cd Downloads/soft/
进行MD5检验,确保安装包正常:
sudo md5sum cuda.run
结果:
检验正确后,输入如下代码安装(第一行修改文件权限,第二行执行文件安装):
chmod 777 cuda.run
sudo ./cuda.run --override
需要一直按住ENTER键。
后面选项答案依次为:
accept
n
y
/usr/local/cuda-8.0
y
y
/home/huhui
第三行配置询问是否要安装nvidia图形驱动器,一定要选n,因为之前已经安装过了,如果再安装则会报错。
如图:
5. CUDNN安装
下载地址:https://developer.nvidia.com/cudnn
cudnn-8.0-linux-x64-v5.1.tgz
进入下载目录:
cd Downloads/soft
我解压到上一层目录:(后面的-C ../不要就是解压到当前目录)
tar zxvf cudnn-8.0-linux-x64-v5.1.tgz -C ../
解压后有个cuda文件,内有include和lib64两个文件夹,进入include文件夹,执行如下命令复制头文件:
cd ../cuda/include/
sudo cp cudnn.h /usr/local/cuda/include/
再cd命令切换进lib64文件夹,执行如下命令复制动态链接库:
cd ../lib64/
sudo cp lib* /usr/local/cuda/lib64/
然后进入复制后的动态链接库进行新的链接。先进入目录:
cd /usr/local/cuda/lib64/
然后查看已有链接:
ls -al | grep libcudnn
删除原有动态文件:
sudo rm -rf libcudnn.so libcudnn.so.5
再次查看:
ls -al | grep libcudnn
已删除,现在建立新的链接:
sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5
sudo ln -s libcudnn.so.5 libcudnn.so
再次查看
ls -al | grep libcudnn
已链接好!
然后设置环境变量和动态链接库:
sudo gedit /etc/profile
然后再打开的文件末尾加上(“=”前后不要有空格)
export PATH=/usr/local/cuda/bin:$PATH
保存之后创建链接文件:
sudo vim /etc/ld.so.conf.d/cuda.conf
这时出现(若未出现问题可跳过)
于是检查一下vim是否安装:
rpm -qa|grep vim
rpm没有安装,按照提示执行:
sudo apt install rpm
再执行
rpm -qa|grep vim
什么结果也没有返回。于是在命令行输入:
vim
出现结果:
为安装vim,输入命令:
sudo apt install vim
再执行
sudo vim /etc/ld.so.conf.d/cuda.conf
现在可以打开了。在文件加入以下内容:
/usr/local/cuda/lib64
按下esc,按下wq保存后退出。并在终端输入以下命令使该链接生效:
sudo ldconfig
使用sample里面的例子来测试还需要编译。因为当前的cuda还不支持gcc5.0以上的版本,在编译之前,我们需要修改配置文件,否则无法编译成功。(之前试过降低gcc版本,搞了很久没成功,这样改会有warning,但是还是先这样吧。)
cd /usr/local/cuda-8.0/include/
sudo cp host_config.h host_config.h.bak
sudo gedit host_config.h
113行如下:
#if __GNUC__ > 5 || (__GNUC__ == 5 && __GNUC_MINOR__ > 3)
说明GCC版本要在5.3以下。查看自己的gcc版本:
gcc --version
5.4的版本,所以这句话需要改,于是我把3直接改成9:
#if __GNUC__ > 5 || (__GNUC__ == 5 && __GNUC_MINOR__ > 9)
保存后退出。然后进入用例文件进行编译(注意执行第二步命令时候需要较长时间是正常现象):
cd ~/NVIDIA_CUDA-8.0_Samples/
sudo make -j16
编译成功。
cd bin/x86_64/linux/release/
sudo ./deviceQuery
运行结果:
说明显卡驱动和cuda安装成功。
6. BLAS(MKL)安装
简介
BLAS,即基础线性代数子程序库,里面拥有大量已经编写好的关于线性代数运算的程序,是一个应用程序接口的标准。caffe官网上推荐了三种实现:ATLAS, MKL, or OpenBLAS。其中atlas可以直接通过命令行安装.在此,采用intel的MKL库。https://software.intel.com/en-us/qualify-for-free-software/student,该链接进入后,申请学生版本的Parallel Studio XE Cluster Edition,这里注册要学校的邮箱拿去注册。该文件有3.9GB,下载完成后切换进文件所在目录解压缩该文件.
cd ~/Downloads/soft/
同样我解压到上层目录:
tar zxvf parallel_studio_xe_2017.tgz -C ../
获取权限:
cd ../
chmod 777 parallel_studio_xe_2017/ -R
cd parallel_studio_xe_2017/
sudo ./install_GUI.sh
上述命令后会跳出一个安装界面,其中需要输入license,从网站上获取: https://signin.intel.com/?TYPE=33554433&REALMOID=06-0a1c2c51-0321-465b-989e-ece55a46b7a2&GUID=&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=SM bvO2%2bjWXMw6Ozwe9nu3rQWgU71LObMMlKWUatZXQuukjpqZ%2fludA3rMJYobZbsIi&TARGET=SM https%3a%2f%2fregistrationcenter%2eintel%2ecom%2fregcensec%2flogin%2easpx, 进入该网站后点击信封那里就会给你之前注册过的邮箱发送含有license的邮件,输入即可正常安装如下图二所示。(我的用户名:myname123 密码:nameqq_)
注意邮件中的“connected to the Internet, please go to Intel® Software Development Products Registration Center to generate a license file.”中的链接,https://registrationcenter.intel.com/en/products/license/?SN=2JXL-XPH448ZS,打开后点击
Intel® Parallel Studio XE Cluster Edition for Linux* (all tools)
后的Download即出现序列号2HWS-XSRJT7VC,输入即可。
安装完成后进行相关文件链接:
sudo gedit /etc/ld.so.conf.d/intel_mkl.conf
在打开的文件中添加库文件
/opt/intel/lib/intel64
/opt/intel/mkl/lib/intel64
添加完成后编译生效
sudo ldconfig
7. OpenCV3.1.0安装与配置
最难的就是这一步,之前两次的问题基本都出现在这里。
从官网下载:http://opencv.org/downloads.html
解压:
unzip opencv-3.1.0.zip -d ../
cd ../opencv-3.1.0
mkdir build
cd build
安装一些依赖项:
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
在CMakeLists.txt 中加入一行:
cd ../
vim CMakeLists.txt
在弹出的文件开头加入一行(注意里面的引号要英文状态下的):
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORCE_INLINES")
然后按esc和:wq保存退出。
编译安装:
cd build/
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j16
(在配置过程会出现– ICV: Downloading ippicv_linux_20151201.tgz…错误。可以到 ippicv_linux_20151201.tgz 下载。
将下载的文件替换掉 opencv-3.1.0/3rdparty/ippicv/downloads/linux-8b449a536a2157bcad08a2b9f266828b下的同名文件,同时在opencv-3.1.0目录下的CMakeList.txt 文件的开头加入一行,然后再次cmake即可,如下:
cd ~/Downloads/
mv ippicv_linux_20151201.tgz opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/
vim opencv-3.1.0/CMakeLists.txt
在弹出的文件开头加入一行(注意里面的引号要英文状态下的):
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORCE_INLINES")
然后按esc和:wq保存退出。)
这一步遇到了问题:
参考http://answers.opencv.org/question/95148/cudalegacy-not-compile-nppigraphcut-missing/
vim ../modules/cudalegacy/src/graphcuts.cpp
将
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
改为
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
保存后退出。
再次make -j16
发现编译成功。
sudo make install
8. Python安装与配置
选择的是anaconda linux64 2.7版本python2.7 。下载完成之��,最好也要进行md5sum的检验。完成之后,cd进入下载文件所在的目录,在命令行输入:
cd ~/Downloads/soft/
bash Anaconda2-4.1.1-Linux-x86_64.sh
yes
(ENTER)
yes
这一选项把PATH=/home/huhui/anaconda2/bin加到了环境变量中。添加库:
sudo gedit ~/.bashrc
添加
export LD_LIBRARY_PATH=/home/huhui/anaconda2/lib:$LD_LIBRARY_PATH
重启电脑之后,在命令行输入:
ipython
就可以看到python的版本。
9. matlab的安装与配置
下载matlab安装包及crack文件。我的是别人拷给我的两个文件夹,所以也不需要我下载和解压。
cd Downloads/soft/r2014b_linux64/
sudo ./install
添加入环境变量:
vim ~/.bashrc
添加:
export PATH=/usr/local/MATLAB/R2014b/bin/:$PATH
保存退出后
source ~/.bashrc
用echo $PATH
来检验:
这里命令行输入matlab
还是会报错:
我们还需要将Crack/linux目录下的libmwservices.so文件拷贝到/usr/local/MATLAB/R2014a/bin/glnxa64:
cd ~/Downloads/soft/MATLAB_R2014B_MAC_LINUX_crack
sudo cp libmwservices.so /usr/local/MATLAB/R2014b/bin/glnxa64/
这里命令行输入matlab
就可以打开matlab了
10. caffe的安装和配置
安装各种依赖包
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y build-essential cmake git pkg-config
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install -y libatlas-base-dev
sudo apt-get install -y --no-install-recommends libboost-all-dev
sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install -y python-pip
sudo apt-get install -y python-dev
sudo apt-get install -y python-numpy python-scipy
sudo apt-get install -y libopencv-dev
下载caffe:
cd ~
git clone https://github.com/BVLC/caffe.git //从github上git caffe
安装配置caffe:
cd caffe
cp Makefile.config.example Makefile.config
sudo gedit Makefile.config
配置文件修改(看英文提示根据具体修改): OPENCV_VERSION := 3
#取消注释符号#,应用opencv3 BLAS := mkl
#BLAS库应用英特尔的mkl
注释第66行自带的python ANACONDA_HOME := /home/huhui/anaconda2
#将具体anaconda2路径写入
PYTHON_INCLUDE := $(ANACONDA_HOME)/include $(ANACONDA_HOME)/include/python2.7 $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
#PYTHON_INCLUDE
之前的注释#去掉,以及之后两行前的#也去掉
PYTHON_LIB := $(ANACONDA_HOME)/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
为了之后编译matlab,这里提前在配置文件中修改matlab路劲,改完后保存退出:
MATLAB_DIR := /usr/local/MATLAB/R2014b
为hdf5之类的文件创建新的链接
\首先执行下面两句话:
cd /usr/lib/x86_64-linux-gnu/
find . -type f -exec sed -i -e 's^"hdf5/serial/hdf5.h"^"hdf5/serial/hdf5.h"^g' -e 's^"hdf5/serial/hdf5_hl.h"^"hdf5/serial/hdf5_hl.h"^g' '{}' \;
执行
ls -al | grep libhdf
然后根据情况执行下面两句:
sudo ln -s libhdf5_serial.so.10.1.0 libhdf5_.so
sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
注意:这里的10.1.0和10.0.2根据不同的系统可能对应的数字会不同,比如在Ubuntu16.04中其数字就是10.1.0.
具体的数字可以在输入命令时候使用tab键补全查看
打开makefile文件搜索并替换
NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
为
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
在命令行输入: source ~/.bashrc
#编译立即生效
然后进入caffe目录:
make all -j4
报错
添加环境变量即可:
sudo vim ~/.bashrc
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
source ~/.bashrc
出现错误的原因是执行convert_cifar_data.bin时会链接/usr/local/lib/libopencv_imgcodecs.so,而这个库需要调到TIFFxx的函数,所以需要找到这些函数在哪个库里。然后执行
find / -name "*libtiff*"
发现libtiff.so在/usr/lib/x86_64-linux-gnu目录下。然后查看环境变量
echo $LD_LIBRARY_PATH
发现没有该目录。于是添加进环境变量:
sudo vim ~/.bashrc
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
source ~/.bashrc
即可编译成功。
编译matlab:
make matcaffe
make mattest
报错:
(参考 http://www.linuxidc.com/Linux/2017-10/147621.htm)源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found的问题。这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中老版本的动态库即可解决。
将/usr/local/MATLAB/R2014b/sys/os/glnxa64下的libstdc++.so.6 更改名称为libstd++.so.6_back:
cd /usr/local/MATLAB/R2014b/sys/os/glnxa64/
sudo mv libstdc++.so.6 libstdc++.so.6_back
sudo ldconfig
11. 编译自己的例子
至此caffe环境算是配好了。但是自己的例子还是跑不了。编译我的extract_features_v0.0.6得到结果:
第一次是是找不到ippicv对应的库(结果忘了截图了),于是就如下操作:
find / -name "libippicv*"
发现了libippicv.a文件在/usr/local/share/OpenCV/3rdparty/lib/目录下,由于好像平常没用到这个库,我就把这个路径加到了g++编译项后面:
LDFLAGS = -L /usr/local/share/OpenCV/3rdparty/lib/ `pkg-config --cflags --libs opencv` -lm
另一种解决方法:
调opencv的时候找不到ippicv的库(http://www.linuxidc.com/Linux/2017-10/147620.htm)
从opencv.pc中可以看出,pkg-config加载库的路径是/usr/local/lib,我们去这这个路径下看看,发现没有-lippicv对应的库,别的选项都有对应的库,然后我们把-lsudo make installsudo /bin/bash -c ‘echo “/usr/local/lib” > /etc/ld.so.conf.d/opencv.conf’sudo ldconfigippicv对应的库(libippicv.a)放到这个路径下就好啦了。
我的libippicv.a在/usr/local/share/OpenCV/3rdparty/lib/
这个路径下。你的也在你自己opencv文件夹的对应路径下。
先cd 到上面这个路径下,然后cp liboppicv.a /usr/local/lib
将这个库文件复制到/usr/local/lib
下就好了。
再次编译报下一个错:
/usr/local/lib/libopencv_imgproc.so.3.1: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Makefile:140: recipe for target 'myprogram' failed
make: *** [myprogram] Error 1
进/usr/local/lib/目录查找:
ls -al | grep libopencv_imgproc.so.3.1
结果如下:
huhui@huhui-ubuntu1604:/usr/local/lib$ ls -al | grep libopencv_imgproc.so.3.1
lrwxrwxrwx 1 root root 24 10月 11 22:33 libopencv_imgproc.so -> libopencv_imgproc.so.3.1
lrwxrwxrwx 1 root root 26 10月 11 22:33 libopencv_imgproc.so.3.1 -> libopencv_imgproc.so.3.1.0
-rw-r--r-- 1 root root 26370776 10月 11 22:32 libopencv_imgproc.so.3.1.0
查看是否加进了环境变量:
echo $LD_LIBRARY_PATH
结果
/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu:/home/huhui/anaconda2/lib:
没有/usr/local/lib
目录,于是跟之前方法一样加上。注意要在同一个窗口操作,我之前在另一个窗口操作的,结果没有添加成功。
sudo vim ~/.bashrc
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
source ~/.bashrc
再次编译这个错误没有了,是另外的错误:
找不到google的库。
原来是makefile里写链接的时候把-lglog写成了-glog(好傻)。改过来之后,还差blas的库找不到,于是一样的方法,发现它在/usr/lib/
里,所以加到环境变量里。发现还有错,就在g++编译选项中加一条-lblas就可以了。终于编译成功!
12. 运行自己写的python代码
代码在./caffe/python/generate_my_models.py
首先加入环境变量:
sudo vim ~/.bashrc
export PYTHONPATH=/home/huhui/caffe/python
注意后面没有caffe。
import caffe
时:
ImportError: No module named _caffe
我直接make pycaffe
就解决了。
然后报错:
ImportError: No module named google.protobuf.internal
以下是之前试过的解决方法,没有用。
//============================================================
/*********************************************************************************
*还是这样靠谱:http://www.linuxidc.com/Linux/2017-10/147619.htm
*我装的是anaconda2, 解决方法是在其中安装protobuf最新版本
*
*
*sudo chmod 777 -R anaconda2
*conda install protobuf
*
*
*这样就解决了
*原来是没有装python版本的protobuf。
*
*
*
*
*
*sudo pip install --upgrade protobuf
*pip install -U scikit-image
*
*现在import caffe
时报错Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or *libmkl_def.so.
。参考https://github.com/BVLC/caffe/issues/3884:
*(Are you using Anaconda? The problem might not be related with caffe. Try
*
*python -c ‘import sklearn.linear_model.tests.test_randomized_l1’
*
*If you can reproduce the error, that means the problem is not related with caffe but anaconda.
*The latest version of numpy and scipy uses mkl by default. If you want to disable that, you can *execute
*
*conda install nomkl
*
*that solves my problem. Hope that can solve yours, too.
*More details:
*scikit-learn/scikit-learn#5046
*https://www.continuum.io/blog/developer-blog/anaconda-25-release-now-mkl-optimizations
*)
*
*
*python -c 'import sklearn.linear_model.tests.test_randomized_l1'
*conda install nomkl
*
*重新进入caffe文件夹下编译,发现编不过了:
*
*
*In file included from src/caffe/util/signal_handler.cpp:7:0:
*./include/caffe/util/signal_handler.h:4:34: fatal error: caffe/proto/caffe.pb.h: No such file or *directory
*compilation terminated.
*Makefile:576: recipe for target '.build_debug/src/caffe/util/signal_handler.o' failed
*make: *** [.build_debug/src/caffe/util/signal_handler.o] Error 1
*make: *** Waiting for unfinished jobs....
*In file included from ./include/caffe/util/hdf5.hpp:9:0,
* from src/caffe/util/hdf5.cpp:1:
*./include/caffe/blob.hpp:9:34: fatal error: caffe/proto/caffe.pb.h: No such file or directory
*compilation terminated.
*Makefile:576: recipe for target '.build_debug/src/caffe/util/hdf5.o' failed
*make: *** [.build_debug/src/caffe/util/hdf5.o] Error 1
*
*
*看来是protobuf的版本没安装对。
*执行
*
*
* sudo apt-get remove libprotobuf-dev
*
*卸载旧版本,再重试。
******************************************************************************/
//=================================================================================
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
以下是该问题的正确解决方法:
第一个碰到的问题就是旧版本和新版本都卸载不干净,编译的时候完全通不过,报错如下:
proto/caffe.pb.h:17:2: error: #error This file was generated by an older version of protoc
解决方法:
1. 先查找libprotobuf
find / -name “libprotobuf”
发现
huhui@huhui-ubuntu1604:~/Downloads/protobuf-2.6.1$ la -al /usr/lib/x86_64-linux-gnu/ | grep proto
-rw-r--r-- 1 root root 395968 3月 30 2016 libmirprotobuf.so.3
-rw-r--r-- 1 root root 2362284 10月 24 2015 libprotobuf.a
-rw-r--r-- 1 root root 395748 10月 24 2015 libprotobuf-lite.a
lrwxrwxrwx 1 root root 25 10月 24 2015 libprotobuf-lite.so -> libprotobuf-lite.so.9.0.1
lrwxrwxrwx 1 root root 25 10月 11 15:46 libprotobuf-lite.so.9 -> libprotobuf-lite.so.9.0.1
-rw-r--r-- 1 root root 199176 10月 24 2015 libprotobuf-lite.so.9.0.1
lrwxrwxrwx 1 root root 20 10月 24 2015 libprotobuf.so -> libprotobuf.so.9.0.1
lrwxrwxrwx 1 root root 20 10月 11 15:46 libprotobuf.so.9 -> libprotobuf.so.9.0.1
-rw-r--r-- 1 root root 1170328 10月 24 2015 libprotobuf.so.9.0.1
lrwxrwxrwx 1 root root 18 10月 24 2015 libprotoc.so.9 -> libprotoc.so.9.0.1
-rw-r--r-- 1 root root 1036544 10月 24 2015 libprotoc.so.9.0.1
huhui@huhui-ubuntu1604:~/Downloads/protobuf-2.6.1$
huhui@huhui-ubuntu1604:~/Downloads/protobuf-2.6.1$
huhui@huhui-ubuntu1604:~/Downloads/protobuf-2.6.1$ la -al /home/huhui/anaconda2/lib/ | grep proto
-rw-r--r-- 1 huhui huhui 15062152 7月 31 04:07 libprotobuf.a
-rwxr-xr-x 1 huhui huhui 983 10月 12 19:12 libprotobuf.la
-rw-r--r-- 1 huhui huhui 1277358 7月 31 04:07 libprotobuf-lite.a
-rwxr-xr-x 1 huhui huhui 1018 10月 12 19:12 libprotobuf-lite.la
lrwxrwxrwx 1 huhui huhui 26 10月 12 19:12 libprotobuf-lite.so -> libprotobuf-lite.so.10.0.0
lrwxrwxrwx 1 huhui huhui 26 10月 12 19:12 libprotobuf-lite.so.10 -> libprotobuf-lite.so.10.0.0
-rwxr-xr-x 1 huhui huhui 753692 7月 31 04:07 libprotobuf-lite.so.10.0.0
lrwxrwxrwx 1 huhui huhui 21 10月 12 19:12 libprotobuf.so -> libprotobuf.so.10.0.0
lrwxrwxrwx 1 huhui huhui 21 10月 12 19:12 libprotobuf.so.10 -> libprotobuf.so.10.0.0
-rwxr-xr-x 1 huhui huhui 7313964 7月 31 04:07 libprotobuf.so.10.0.0
-rw-r--r-- 1 huhui huhui 13617312 7月 31 04:07 libprotoc.a
-rwxr-xr-x 1 huhui huhui 1010 10月 12 19:12 libprotoc.la
lrwxrwxrwx 1 huhui huhui 19 10月 12 19:12 libprotoc.so -> libprotoc.so.10.0.0
lrwxrwxrwx 1 huhui huhui 19 10月 12 19:12 libprotoc.so.10 -> libprotoc.so.10.0.0
-rwxr-xr-x 1 huhui huhui 4591133 7月 31 04:07 libprotoc.so.10.0.0
发现目前存在两个 protobuf 版本,分别是 /home/huhui/anaconda2/lib/libprotoc.so.10 与 /usr/lib/x86_64-linux-gnu/libprotoc.so.9。
因此需要删除新版本的 /home/huhui/anaconda2/lib/libprotoc.so.10
sudo rm -rf /home/huhui/anaconda2
然后按照前面步骤,重装 python,问题解决;
现在是第二个问题,就是回到了开始的状态,caffe内部编译都可以通过,但运行python会报protobuf版本不一样的错。(其实如果不是之前按照错误的方法解决问题,全部搞乱了,前面一步是不需要的。)以下是正确解决方法:
(1)执行protoc --version
查看原始protobuf版本,发现是2.6.1。
(2)从https://github.com/google/protobuf/tree/v2.6.1上下载protobuf-2.6.1.zip,解压并进入protobuf-2.6.1/python目录。(如果是刚开始就遇到这个问题可能是不需要下载的,可以找找看,当然我不确定,因为没试过。)
(2)按照 README.txt 中步骤执行以下操作,安装python 版本的 protobuf, 具体如下:
python setup.py build
python setup.py google_test
python setup.py install
结果:
Finished processing dependencies for protobuf==2.6.1
python版本的protobuf与C++版本的版本号相同,都为2.6.1。
再回去编译,就可以通过了!
还有问题,就是opencv的库cv2调不了。
原因是没装python-opencv
package. sudo apt-get install python-opencv
现在再运行,发现还是找不到cv2,所以我们找下这个库在哪里:
find / -name "*cv2*so"
有用的就是这两个:
/usr/lib/python2.7/dist-packages/cv2.x86_64-linux-gnu.so
/usr/local/lib/python2.7/dist-packages/cv2.so
但是我不知道是哪个。我就先把这两个路径先加到PYTHON文件中去:
sys.path.append('/usr/lib/python2.7/dist-packages/')
sys.path.append('/usr/local/lib/python2.7/dist-packages/')
发现可以找到了。然后分别注释掉这两句发现起作用的是后面一个路径,即
sys.path.append('/usr/local/lib/python2.7/dist-packages/')
所以只需要保留这一句就好了。(当然一眼就能看出来的同学就不用这么试啦)
现在再运行python的程序,发现调不了cv。
ImportError: No module named cv
import numpy的时候出现:
AttributeError: ‘module’ object has no attribute ‘bool_’
这个问题是把PYTHONPATH配置到了caffe-master/python/caffe底下,应该配置到caffe-master/python里就好了。一定要谨慎配置PYTHONPATH,否则容易导致其他的问题。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147618.htm