Ubuntu 18.04裝matcaffe問題總結(上)

************** 2019.4.17 安裝總結 ****************

首先需要裝caffe,最開始我是直接用conda裝的cafe,但是因爲要用到matcaffe又沒找到在conda環境下用matcaffe的方法,只好刪掉conda中的caffe環境,從caffe的源碼開始裝,接下來就開始了神奇的經歷。

下載caffe源碼,按照官方安裝說明,修改MATLAB_DIR之後,用以下命令安裝:

mkdir build
cd build
cmake ..
make all
make install
make runtest

執行到make all的時候,報錯了:”fatal error: hdf5.h: 沒有那個文件或目錄“,解決辦法參見https://blog.csdn.net/xue_wenyuan/article/details/52037121

接着,很順利的完成了make install和make runtest

接下來是裝matcaffe,直接在以上命令的基礎上輸入make matcaffe的時候報錯了:

”matcaffe make: *** 沒有規則可製作目標“”。 停止。“,想到是不是應該在caffe的根目錄make matcaffe

於是退到caffe根目錄,重新make matcaffe,又報了以下兩個錯:

1)”在函數‘caffe::WindowDataLayer<float>::load_batch(caffe::Batch<float>*)’中:
window_data_layer.cpp:(.text._ZN5caffe15WindowDataLayerIfE10load_batchEPNS_5BatchIfEE[_ZN5caffe15WindowDataLayerIfE10load_batchEPNS_5BatchIfEE]+0xc56):對‘cv::imread(cv::String const&, int)’未定義的引用“

2)”您使用的 gcc 版本爲 '5.5.0'。不支持該版本的 gcc。MEX 當前支持的版本爲 '4.9.x‘ “:注意這只是個warning,是可以不用解決的解決的話反而容易畫蛇添足,引起不必要的麻煩!然而我當時沒注意到只是個warning,所以選擇了通過百度解決,以下是解決降級的過程:

百度到了需要降級,降級的方法可以參見https://blog.csdn.net/QianQiYing/article/details/81585136,這裏因爲我用的是Ubuntu18.04,版本的原因導致我裝不上gcc 4.9和g++ 4.9,於是又百度到了新的裝gcc和g++的方法,針對Ubuntu18.04有效,參見:https://blog.csdn.net/yizhang_ml/article/details/86750405

降級成功後,重編譯caffe,發現編譯不成功!於是又調整回了5.5版本的gcc和g++,但是後來發現不成功的原因不是降級導致的,應該還是因爲matcaffe沒配置好,導致編譯不成功,只是因爲之前用的是cmake,後來改用make了。總之經過一番折騰又回到了原點,解決matcaffe的第1個錯誤。

************** 2019.4.18 安裝總結 ****************

以下全爲逼逼,可以直接跳過看最後的總結!

關於opencv的問題在網上找到了以下三個解決方法:

1)Makefile.config中打開OPENCV_VERSION := 3

2)Makefile.config中打開USE_PKG_CONFIG := 1

3)Makefile中的LIBRARIES += glog gflags protobuf boost_system boost_filesystem m後面加上opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

從Makefile的代碼中可以看出來,方法1和3的作用其實是一樣的,方法2是針對opencv沒有裝在默認目錄的情況,但是我的opencv是裝在默認目錄的,也打開了OPENCV_VERSION,問題還是沒解決。又回到官方安裝說明,發現有兩種編譯方法,cmake和make,cmake是在build目錄下編譯的,make是直接在根目錄下編譯的。於是重新用make在caffe根目錄編譯,結果caffe和matcaffe都沒編譯成功,而且都是opencv相關的問題。仔細分析一下發現,cmake可以成功編譯caffe不能編譯matcaffe,make兩個都不能編譯,而我是用cmake編譯的caffe,用make編譯的matcaffe,那麼接下來有兩種方案,解決爲什麼cmake沒成功編譯matcaffe或者解決爲什麼make不能編譯caffe和matcaffe。

cmake的方案嘗試修改CMakeLists的配置,比如把BUILD_matlab設置爲on,但是沒什麼用。發現用cmake生成的makefile裏沒有matcaffe的模塊,應該是需要自己補上去,感覺太難了,只得放棄了。但是從cmake中想到,既然它可以順利生成caffe說明能解決opencv未識別的問題,那麼可以從CMakeLists文件中找到正確的opencv路徑放到makefile裏面,然後用make命令編譯,也就是解決用make編譯的方案。於是學會了message("message:${MATLABMEX_FOUND}")函數,通過在/usr/share/OpenCV/OpenCVConfig.cmake中打印OpenCV_INCLUDE_DIRS變量,順利找到了opencv的路徑(同時學會了find_package函數指定依賴包的版本)。接着調試根目錄中的makefile文件,看是不是沒有包含opencv的路徑。果然,在makefile.config的INCLUDE_DIRS和LIBRARY_DIRS中沒有opencv庫的路徑,於是把路徑加上再make,成功!

至此解決了make matcaffe的問題,總結一下出現cv::imread未定義,說明沒有找到opencv,那麼首先檢查opencv裝上沒,然後檢查Makefile.config中有沒有打開opencv的設置,最後檢查opencv的庫有沒有都找到。在cmake的文件中可以用message打印變量,在make的文件中可以用$(warning $(DVD_SERVICE))打印變量。網上一般都是在make mattest出問題,沒想到我在make matcaffe上都耗了一天。接下來,make mattest毫不意外的又出問題了。

詳情請參見https://blog.csdn.net/applefl/article/details/89407419

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章