ubuntu下編譯caffe

Ubuntu下編譯caffe

純粹是我的編譯的記錄。不用CUDA(筆記本是amd卡,萬惡的nvidia);不手動編譯依賴包(apt-get是用來幹啥的?用來直接裝二進制包,以及自動解決依賴項的)
caffe官方給出的ubuntu下的教程在http://caffe.berkeleyvision.org/install_apt.htmlhtml

make: protoc: 命令未找到

解決辦法:python

sudo apt-get install protobuf-c-compiler protobuf-compiler

fatal error: gflags/gflags.h:沒有那個文件或目錄

解決辦法:linux

sudo apt-get install libgflags-dev

順便吐槽一下ubuntu的apt-get命令的補全,它是殘破的。我想下載gflags,因而輸入:git

sudo apt-get install gflags #此處直接按tab,但願它補全,tab一次不出來就再按一次

結果呢,只顯示了一個結果:github

sudo apt-get install libgflags2v5

問題是,實際上有3個結果:libflags2v5,libgflags-dev,libgflags-docshell

ubuntu的命令行,另外一個殘破的地方在於,各類包老是喜歡私自添加lib前綴,好比,好好的opencv,非得要libopencv才行(全名並非libopencv和oepncv,一般都是用-dev或-devel各類的包)ubuntu

fatal error: glog/logging.h: 沒有那個文件或目錄

嘗試apt-get install glog,媽蛋,沒有。要這樣:bash

sudo apt-get install libgoogle-glog-dev

fatal error: hdf5.h: 沒有那個文件或目錄

媽蛋!老子執行過apt-get install hdf5-tools了,怎麼還說沒有hdf5?並且我當時tab了好幾下,只有兩個結果,另外一個是hdf5-helpers不裝也罷。
其實,這又是ubuntu的命令行比較殘破的緣由。爲何不能完整點搜索?markdown

固然此次,須要的不只僅是一個-dev包,由於試了後仍是報一樣錯誤,那就嘗試:ide

sudo apt-get install libhdf5-\*  #我用的shell是zsh,若是你沒有用zsh,那就是默認的bash,那就把「\」去掉。這,是zsh比較殘破的地方

而後再make all,仍是報一樣錯誤。怒了,此次是caffe自身的問題。要在Makefile.config中把hdf5的一個目錄添加進來:

# 找到這行:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include

# 替換爲:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/

fatal error: lmdb.h: 沒有那個文件或目錄

擦,剛剛明明apt-get安裝了lmdb-utils,怎麼又來?並且,安裝lmdb時tab了好幾回只有這麼一個有用的結果。
此次,又是ubuntu命令的殘破引起的。

解決辦法:

sudo apt-get install liblmdb-dev

make: *** [.build_release/lib/libcaffe.so.1.0.0-rc3] Error 1

此次的問題有點大了。問題完整描述:

AR -o .build_release/lib/libcaffe.a
LD -o .build_release/lib/libcaffe.so.1.0.0-rc3
/usr/bin/ld: cannot find -lboost_python3
collect2: error: ld returned 1 exit status
Makefile:563: recipe for target '.build_release/lib/libcaffe.so.1.0.0-rc3' failed
make: *** [.build_release/lib/libcaffe.so.1.0.0-rc3] Error 1

我也想不出辦法,因而google之。發現caffe在github的repo上有人提出一樣的問題:https://github.com/BVLC/caffe/issues/4045
而後,真是不友好或沒有用的回答,維護caffe的都是什麼鬼?!說什麼,別在issue裏提「使用,安裝,編譯出錯」的問題,請使用caffe-users list。我就草,issue不是用來解決問題的麼?user list是google group谷歌用戶組,一個更很差用的東西,連markdown都沒有,太落後了。anyway,這些都無論用。

管用的方法:再次修改Makefile.config(艹,caffe官方的Makefile.config你敢再殘破一點麼?市面上一共就3種最經常使用的跑caffe的平臺,第一個就是ubuntu還搞這麼用戶不友好,第二個是fedora只能說還湊合由於fedora自身命令比ubuntu完善,第三個mac用戶暫時不考慮,真正跑caffe的都是燒GPU的,mac用戶管他幹啥)

anyway,要這樣改:

# 原來
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

# 如今改爲(64位系統):
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

# 或者,你是32位系統:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/i386-linux-gnu /usr/lib/i386-linux-gnu/hdf5/serial

這樣就行了麼?天真。還得執行很是骯髒的sed腳本!

find . -type f -exec sed -i -e 's^"hdf5.h"^"hdf5/serial/hdf5.h"^g' -e 's^"hdf5_hl.h"^"hdf5/serial/hdf5_hl.h"^g' '{}' \;

這個多是ubuntu自身的問題,也多是caffe的問題。

blas的問題

做爲小白用戶,方便起見,用不着去搞MKL,一則申請麻煩,二則太大。同時也要儘可能避免手動編譯。手動編譯源碼可能帶來更多的依賴項問題。因此儘量全都用apt-get安裝。

sudo apt-get install libopenblas-dev

reference

https://github.com/BVLC/caffe/wiki/Ubuntu-16.04-or-15.10-Installation-Guide
https://github.com/SHUCV/caffe_demo/wiki/install-caffe-on-ubuntu14.04

==== update 2016年11月5日 17:39:33 ====
換ubuntu16.04了,編譯caffe時會提示:memcpy未定義
解決方法:Makefile中,找到:

NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

換成

NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

相關文章
相關標籤/搜索