我用的是linux mint 18.2 64位,因爲是虛擬機安裝,所以只能用CPU。因爲我的linux mint18.2是基於ubuntu16.04版本的所以按官方文檔安裝說明http://caffe.berkeleyvision.org/install_apt.html點擊打開鏈接,裏面的<17.04進行安裝。
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
sudo apt-get install libatlas-base-dev
因爲我首先系統是新做的,python也沒有安裝其它的。都是系統只帶的,後面我會說安裝python anaconda的應該怎麼弄。
下面是對Makefile.config進行修改,首先執行下面linux命令。複製出一個Makefile.config
cp Makefile.config.example Makefile.config
因爲我用的是CPU。所以把
CPU_ONLY := 1
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/hdf5/serial
前面的註釋去掉
然後執行
make all
C++環境的就編譯完成了,因爲C++編譯時不用python所以python的設置可以不用。都用默認的就可以。
下面是python的配置
首先我安裝的是anaconda3。因爲我用的是python3.6
然後修改Makefile.config文件中的
ANACONDA_HOME := /home/learnml/anaconda3
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python3.6m \
$(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include
PYTHON_LIBRARIES := boost_python3 python3.6m
PYTHON_LIB := $(ANACONDA_HOME)/lib
WITH_PYTHON_LAYER := 1
下面是在編譯make all和make pycaffe時出現的一些問題的解決。
1.cannot find -lboost_python3
解決辦法:
首先去/usr/lib/x86_64-linux-gnu目錄下查看是否有python3版本的libboost,如果有類似libboost_python35.so但是沒有libboost_python3.so則需要手動建立連接。
sudo ln -s libboost_python-py35.so libboost_python3.so
2.version `GLIBCXX_3.4.21' not found
解決辦法:
安裝anaconda3下面的libgcc。
conda install libgcc
3 std::__cxx11::basic_string報錯。
解決辦法:
這個是因爲anaconda3裏面的的文件與C++的編譯衝突了。這個只能安完anaconda3後在編譯make all時纔會出現。
解決辦法是把
ANACONDA_HOME := /home/learnml/anaconda3 這個的路徑改成不存在的。
改成:ANACONDA_HOME := /home/learnml/anaconda 這樣在make all時就不會報這個錯了。然後在make pycaffe時在把路徑改回正確的。
4. pyconfig.h:No such file or Directory
解決辦法:
這個是在make all時報的。把
#WITH_PYTHON_LAYER := 1--註釋打上。注掉這個,在make all
5.ImportError: /home/zero/Documents/caffe-master/python/caffe/_caffe.so:undefined symbol:
_ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE
解決辦法:這個是在python環境裏,import caffe時報的錯。
PYTHON_LIBRARIES := boost_python3 python3.6m--把這個註釋去掉。
6.No module named google.protobuf.internal
解決辦法:這個也是在python環境下,import caffe時報的錯。
在linux 環境下,${anaconda3}/bin 下。
sudo ./conda install protobuf