1. 程式人生 > >Caffe安裝中多版本protoc選擇問題

Caffe安裝中多版本protoc選擇問題

作為一個實驗室資源特別緊缺,好幾個人在伺服器上共用一個路徑的苦逼研究生,面對大家都需要跑caffe的時候就會非常蛋疼。特別是有些人亂七八糟的裝不同版本的protobuf,安裝在不同路徑下,該如何選取特定的版本進行caffe編譯呢?
我是linux零基礎+caffe零基礎,查了好多資料,勉強拼湊出來了如何選擇protobuf版本的解決辦法。

例如我們的伺服器上有兩個版本的protobuf,版本3.1.0安裝在usr/local/bin下,版本3.0.0安裝在$HOME/anaconda2/bin下,
在terminal中執行

sudo protoc --version

會顯示當前版本是3.1.0,路徑指向的是usr/local/bin

protoc --version

就會顯示版本是3.0.0,路徑指向$HOME/anaconda2/bin

編譯caffe用

sudo make all -j4

就會出現這一個常見的問題

In file included from .build_release/src/caffe/proto/caffe.pb.cc:5:0:
.build_release/src/caffe/proto/caffe.pb.h:12:2: error: #error This file was generated by a newer version of protoc which is
 #error This file was generated by a newer version of protoc which is
^ .build_release/src/caffe/proto/caffe.pb.h:13:2: error: #error incompatible with your Protocol Buffer headers. Please update #error incompatible with your Protocol Buffer headers. Please update ^ .build_release/src/caffe/proto/caffe.pb.h:14:2: error: #error your headers. #error your headers. ^ ...

這是一個經典問題,所有人都會跟你說重灌protobuf吧,比如執行

sudo apt-get install libprotobuf-dev

然而對於一個需要低版本的protobuf的人這句命令列沒卵用。

由於我的$HOME/anaconda2/bin中有合適的版本,所以我是打算直接用這裡的protobuf,通過查資料,瞭解到sudo的時候,預設的環境變數在/etc/sudoers檔案中,一般來說sudo會重置$PATH,而sudoers檔案有這樣一行

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

所以 sudo的時候$PATH就是從這裡讀取,因此我只需新增我的路徑就可以了,注意要把路徑新增在其他版本路徑的前面,位置決定了讀取順序

#Defaults   secure_path="/usr/local/sbin:/usr/local/bin:\$HOME/anaconda2/bin:/usr/sbin:/usr/bin:/sbin:/bin"

注意sudoers檔案很重要,修改前記得備份

secure_path是即時生效的,這時候再次執行sudo使用的版本就變成了我需要的3.0.0版本。
這算是解決了第一步問題吧……後面還有各種問題,一點一點記錄吧。