在ubuntu编译caffe的matlab接口

来源:互联网 发布:淘宝怎么搜高仿鞋 编辑:程序博客网 时间:2024/06/06 03:03

最近看的论文里的代码要用到caffe的matlab接口,于是就编译了caffe的matlab接口。这篇博客主要记录一下我编译matlab接口时遇到的坑。编译caffe的matlab接口和编译caffe的python接口一样,需要先编译好,然后在matlab里用addpath命令添加caffe的模块,就可以在matlab里调用caffe的函数了,addpath函数就像在python里的import一样。

1make matcaffe

先在caffe的主目录下运行命令make matcaffe,用来编译caffe的matlab接口。现在说一说我在这一步遇到的坑吧。

修改caffe-master/Makefile.config

需要在Makefile.config文件中,添加Matlab的安装路径才行。

MATLAB_DIR := /usr/local/MATLAB/R2014a

把如上语句添加到Makefile.config中,不然会报错。

在Makefile中添加C++ 11支持

我们需要在Makefile中(不是Makefile.config)添加C++11支持,不然编译的时候会报出类似undifined symbol之类的错误。

CXXFLAGS += -std=C++11

把上面的语句添加到makefile中。至于写在哪,我是随便找位置写的。

2 make mattest

这一步就遇到一个很难解决的问题,报错是什么Invalid MEX-file之类的,就是关于libstdc++.so.6库的问题,其实不只是这一个库有问题,这个问题的原因,是matlab自带有名为libstdc++.so.6的库,ubuntu系统也自带有libstdc++.so.6的库,而matlab自带的库版本比较老,有些函数没有,所以在编译的时候就报错了,没错,虽然库的名字都一样,但是库里的函数可能不一样。

解决方案:
网上有很多帖子是用LD_PRELOAD这个环境变量来解决的,但是对我不起作用。我是直接将matlab自带的那些库给删了,然后全部替换成了系统自带的库,这样版本问题就没有了,最后也顺利编译通过了。
在shell里运行如下命令:

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  

需要注意的地方:
1在上面代码里提到的每个库都需要被替换
2/usr/lib/x86_64-linux-gnu/是我电脑上这些库的存储位置,你可以用 location  库名  来找到这些库的所在位置,八成就是这个了,因为是默认的。
3可以不删除原来matlab自带的库,重命名一下,万一出错了还有备份可以恢复!

最后你就可以在matlab里面,通过addpath函数,把 caffe_root/matlab的路径添加上去以后,就可以调用caffe的函数了。

原创粉丝点击