Ubuntu Matlab problems summary

Problem1:

MEX-file
'/home/flyingbird/Downloads/caffe-master/matlab/+caffe/private/caffe_.mexa64'
無效:
/home/flyingbird/Downloads/caffe-master/matlab/+caffe/private/caffe_.mexa64:
undefined symbol:
_ZN2cv8imencodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayERSt6vectorIhSaIhEERKSB_IiSaIiEE。

出錯 caffe.set_mode_cpu (line 5)
caffe_('set_mode_cpu');

出錯 caffe.run_tests (line 6)
caffe.set_mode_cpu();

具體的方法基本思想是找到matlab和caffe所依賴的這些庫的位置,然後通過某種方式建立連接即可。

1 找到matlab中這些庫的位置
libstdc++.so.6:它在matlab中的位置時 matlab/sys/os/glnxa64/中
libopencv_core.so.2.4,libopencv_highgui.so.2.4,libopencv_imgproc.so.2.4:matlab/bin/glnxa64中
而且通過ls libopencv_* -l 命令可以看到這些庫通過鏈接的都是這個文件夾中自己的庫。
2 找到caffe所依賴的這些庫的位置
這四個庫資源都是在:/usr/lib/x86_64-linux-gnu中
3 進行鏈接
1)首先需要備份或刪除matlab中的那幾個庫的軟鏈接,建議備份,命令如下:
Sudo mv /home/xaver/local/MATLAB/sys/os/glnxa64/ libstdc++.so.6 /home/xaver/local/MATLAB/sys/os/glnxa64/ libstdc++.so.6
注意以上路徑並不一定就是你的路徑,物理意義上表示的是你的matlab所安裝的路徑

Problem2:

編譯mattest,測試下編譯好的matcaffe是否能用——在這一步一般不會編譯成功,這裏需要修改兩個領域共計四個庫的鏈接。其原理是因爲matlab與caffe通過接口進行編譯的過程中,兩者所引用的庫應當指向同一個即可

solver method:

sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4 /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_core.so.2.4
sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4 /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_highgui.so.2.4
sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4 /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_imgproc.so.2.4

Problem4:

uname: /usr/local/MATLAB/R2016b/bin/glnxa64/libtiff.so.5: no version information available (required by /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4)
sed: /usr/local/MATLAB/R2016b/bin/glnxa64/libtiff.so.5: no version information available (required by /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4)
getconf: /usr/local/MATLAB/R2016b/bin/glnxa64/libtiff.so.5: no version information available (required by /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4)
awk: /usr/local/MATLAB/R2016b/bin/glnxa64/libtiff.so.5: no version information available (required by /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4)
awk: /usr/local/MATLAB/R2016b/bin/glnxa64/libtiff.so.5: no version information available (required by /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4)
/usr/local/MATLAB/R2016b/bin/glnxa64/MATLAB: /usr/local/MATLAB/R2016b/bin/glnxa64/libtiff.so.5: no version information available (required by /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4)

編譯make matcaffe後,執行make mattest後,往往出現“Invalid MEX-file"問題,其原因是MATLAB和linux的庫衝突,解決的方法是用linux的庫(在編譯caffe之前大家的opencv等庫肯定也早已裝好了)

解決方法:

通過export LD_LIBRARY_PATH和 LD_PRELOAD來鏈接,但是效果不好。最後發現,只有直接去MATLAB下面刪除庫並重新鏈接到x86_64-linux-gnu的方法是最好的。具體方法如下:

1.不需要降級gcc和g++,就用linux的自帶版本,否則caffe編譯不一定通過。我的是14.04的5.4(千萬不要先用5去編譯caffe再降級用4.4編譯matcaffe)

2.不要去用改LIBRARY_PATH的方法,因爲很可能不成功,尤其是有倒黴催的anaconda的情況下。

3.找到你的linux庫的位置(一般是/usr/lib/x86_64-linux-gnu/)以及MATLAB庫的位置(默認是/usr/local/MATLAB/R2014a/sys/os/glnxa64/)。然後寫個sh執行下列操作

rm -rf /usr/local/MATLAB/R2014a/sys/os/glnxa64/libstdc++.so.6
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /usr/local/MATLAB/R2014a/sys/os/glnxa64/libstdc++.so.6
rm -rf /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_core.so.2.4
ln -s /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4.9  /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_core.so.2.4
rm -rf /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_imgproc.so.2.4
ln -s /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4.9  /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_imgproc.so.2.4
rm -rf /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_highgui.so.2.4
ln -s /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9  /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_highgui.so.2.4
rm -rf /usr/local/MATLAB/R2014a/bin/glnxa64/libfreetype.so.6
ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so.6  /usr/local/MATLAB/R2014a/bin/glnxa64/libfreetype.so.6
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章