不知不覺居然花了一個星期來安裝Caffe。。。真是醉了。
接上一篇blog,本以為編譯完cuda,opencv之后問題就差不多了(其實本來是沒有什么問題的,但硬是被我搞了一堆事情出來....)
出於對作死的熱愛,本人沒有選擇官方的Caffe進行安裝,而是選擇了一位韓國大兄弟diy過的Caffe。
然后就是瘋狂的報錯...一瞬間報錯4000行你敢不敢信?多得終端都顯示不完...由於我是中文的ubuntu,報錯里面還是一堆亂碼。
研究了許久沒有結果之后我把調試信息的輸出改成中文,然后將編譯信息輸出到文件里....
然而着這並沒有什么卵用(媽個雞)
這是上星期四的安裝進度...
一直跳票到前天下午,我,又回來了,面對4000行的報錯信息...
這4000行的報錯是什么樣的呢...
就是它!Caffe里幾乎所有的cpp代碼都報了這個錯!
機智的我首先想到是不是編譯器版本不對...
於是我把gcc5,gcc4.9,gcc4.8,gcc4.7(包括g++)都試了一遍....
然並卵....
而且網上居然沒有人說在安裝Caffe的時候遇到過這個問題
本來我也考慮過是不是這位大兄弟的Caffe有問題...所以我也把官方的Caffe也下了下來...
但是...由於Makfile和Makefile.configure需要修改,所以我把這位兄弟的Makefile拷到了官方的Caffe里面...
然后官方的Caffe也報出了一樣的錯...
你應該已經猜到了...沒錯,就是這位兄弟的Makefile !
當我把官方原版的Makefile從github上拷下來之后...錯誤果然沒有了!!!
現在的錯誤變成了
undefined reference to `google::protobuf::io::CodedOutputStream::WriteStringWithSizeToArray(std::string const&, unsigned char*)
然而這個錯誤其實是我自找的....
因為之前報錯的時候我懷疑是protobuf的問題...然后我用gcc4.9重新編譯了一遍protobuf....
於是我用gcc5編譯Caffe的時候果斷出錯了..
然而我用gcc5重新編譯了一遍protobuf之后還是報錯...
MDZZ
最后發現是自己忘記make clean了...
所以gcc4.9編譯出來的protobuf反復被install上去...真是醉了
其實遇到了很多問題...不過記不太清了...有的問題bing一下就解決了,改改Makefile,配置文件就行了
,有的問題和上述差不多,就是gcc版本不對...
我遇到的最多的問題就是gcc的版本沖突問題,這個很重要,搞清楚了這個caffe的安裝就輕松多了。
因為gcc4到gcc5的變化非常大,如果依賴的編譯和Caffe的編譯使用不同的編譯器的話就會報
undefined reference(未定義的引用) to XXXX
所以最好從頭到尾使用一個gcc編譯器,編譯opencv,cuda,caffe,以及所有依賴
在這里給一些tip,希望后來人小心。
1 cuda8 支持gcc5 但是cuda8以下不支持(或者說會出問題,github上有人這么說的,我沒試過)
2 ubuntu15.10,16.04通過apt-get安裝的都是用gcc5編譯過的軟件包,在15.10之下的ubuntu通過apt-get應該默認安裝gcc4編譯的軟件包
3 必要的時候就去官網上下載依賴項源碼自己手動編譯...手動編譯並不麻煩(雖然我手動編譯之后都在自找麻煩)
4 遇到問題不要百度,百度一下,真的會死!不能google就用bing,不要搜中文,注意看github和stackouflow還有google group上的問題和回答,非常有幫助!