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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值