matlab接口的编译真是泪千行。。。本来我是不用matlab的 ,但是带我的师兄只用matlab,为了学习他的程序我不得不编译接口。。。
make matcaffe之后一开始就出现了gcc版本不合的问题,这个我猜大部分人都遇到过
目前caffe只支持4.7版本
因此我们要降级gcc和g++
我用的就是这位博主的方法,查了很多其他的方法都没用。。。各位看官可以去围观一波。。这个方法我用完就可以编译了
http://www.cnblogs.com/loveyakamoz/archive/2012/12/26/2833967.html
最棒棒的是这个方法并不会删除gcc版本,以后你想升回来很方便!是不是很棒棒!
把gcc编译好之后又遇到了另一个问题
1 $make matcaffe -j8 2 MEX matlab/+caffe/private/caffe_.cpp 3 使用 'g++' 编译。 4 /home/zkk/caffe/matlab/+caffe/private/caffe_.cpp: In function ‘void delete_solver(int, mxArray**, int, const mxArray**)’: 5 /home/zkk/caffe/matlab/+caffe/private/caffe_.cpp:208:3: warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default] 6 /home/zkk/caffe/matlab/+caffe/private/caffe_.cpp:208:4: error: no matching function for call to ‘remove_if(std::vector<boost::shared_ptr<caffe::Solver<float> > >::iterator, std::vector<boost::shared_ptr<caffe::Solver<float> > >::iterator, delete_solver(int, mxArray**, int, const mxArray**)::<lambda(const boost::shared_ptr<caffe::Solver<float> >&)>)’ 7 /home/zkk/caffe/matlab/+caffe/private/caffe_.cpp:208:4: note: candidate is: 8 In file included from /usr/include/c++/4.7/algorithm:63:0, 9 from ./include/caffe/blob.hpp:4, 10 from ./include/caffe/caffe.hpp:7, 11 from /home/zkk/caffe/matlab/+caffe/private/caffe_.cpp:18: 12 /usr/include/c++/4.7/bits/stl_algo.h:1166:5: note: template<class _FIter, class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate) 13 /home/zkk/caffe/matlab/+caffe/private/caffe_.cpp:208:4: error: template argument for ‘template<class _FIter, class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate)’ uses local type ‘delete_solver(int, mxArray**, int, const mxArray**)::<lambda(const boost::shared_ptr<caffe::Solver<float> >&)>’ 14 /home/zkk/caffe/matlab/+caffe/private/caffe_.cpp:208:4: error: trying to instantiate ‘template<class _FIter, class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate)’ 15 /home/zkk/caffe/matlab/+caffe/private/caffe_.cpp: In function ‘void delete_net(int, mxArray**, int, const mxArray**)’: 16 /home/zkk/caffe/matlab/+caffe/private/caffe_.cpp:293:3: warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default] 17 /home/zkk/caffe/matlab/+caffe/private/caffe_.cpp:293:4: error: no matching function for call to ‘remove_if(std::vector<boost::shared_ptr<caffe::Net<float> > >::iterator, std::vector<boost::shared_ptr<caffe::Net<float> > >::iterator, delete_net(int, mxArray**, int, const mxArray**)::<lambda(const boost::shared_ptr<caffe::Net<float> >&)>)’ 18 /home/zkk/caffe/matlab/+caffe/private/caffe_.cpp:293:4: note: candidate is: 19 In file included from /usr/include/c++/4.7/algorithm:63:0, 20 from ./include/caffe/blob.hpp:4, 21 from ./include/caffe/caffe.hpp:7, 22 from /home/zkk/caffe/matlab/+caffe/private/caffe_.cpp:18: 23 /usr/include/c++/4.7/bits/stl_algo.h:1166:5: note: template<class _FIter, class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate) 24 /home/zkk/caffe/matlab/+caffe/private/caffe_.cpp:293:4: error: template argument for ‘template<class _FIter, class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate)’ uses local type ‘delete_net(int, mxArray**, int, const mxArray**)::<lambda(const boost::shared_ptr<caffe::Net<float> >&)>’ 25 /home/zkk/caffe/matlab/+caffe/private/caffe_.cpp:293:4: error: trying to instantiate ‘template<class _FIter, class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate)’ 26 27 Makefile:518: recipe for target 'matlab/+caffe/private/caffe_.mexa64' failed 28 make: *** [matlab/+caffe/private/caffe_.mexa64] Error 255
各种百度无果。。。最后在caffe中文社区上找到的方法,,跟我一模一样的问题
解决办法是:
在Makefile里面,大约第410行那一句话
CXXFLAGS += -MMD -MP
下面添加CXXFLAGS += -std=c++11,
最后是这样 CXXFLAGS += -MMD -MP CXXFLAGS += -std=c++11
然后在caffe根目录下make clean,make all
宾果!matlab就这样顺利编译好啦!!!
看着挺简单。。。但是我能说我搜了两三天吗。。。。。给你们节省不少时间哈。。。。。