1

我一直在尝试在 Ubuntu 16.04 中编译 Matcaffe。我可以成功编译 caffe 和 pycaffe(使用 gcc 5)。但是,由于 Ubuntu 16.04 带有 gcc 5,并且 MATLAB R2016b 与 gcc 4.9 兼容,因此在编译期间我收到了以下警告(使用make matcafee):

MEX matlab/+caffe/private/caffe_.cpp 使用“g++”构建。警告:您使用的是 gcc 版本“5.4.0”。不支持 gcc 的版本。MEX 当前支持的版本是“4.9.x”。有关当前支持的编译器的列表,请参见: http: //www.mathworks.com/support/compilers/current_release。MEX 成功完成。

即使创建了 MEX 文件,我也无法在 MATLAB 中使用它,因为它无法识别它们。

为了解决这个问题,我安装了 gcc 4.9 和 g++ 4.9 并更新了符号链接以使用它们。当我尝试编译 matcaffe 时,我收到以下错误消息:

MEX matlab/+caffe/private/caffe_.cpp 使用“g++”构建。/tmp/mex_286607035953408_13265/caffe_.o: 在函数 net_copy_from(int, mxArray_tag**, int, mxArray_tag const**)': caffe_.cpp:(.text+0x167d): undefined reference to caffe::Net::CopyTrainedLayersFrom(std::string)' /tmp/mex_286607035953408_13265/caffe_.o: 在函数get_net(int, mxArray_tag**, int, mxArray_tag const**)': caffe_.cpp:(.text+0x182b): undefined reference tocaffe::Net::Net(std::string const&, caffe::Phase, int, std::vector > const*, caffe::Net const*)' /tmp/mex_286607035953408_13265/caffe_.o: 在函数get_solver(int, mxArray_tag**, int, mxArray_tag const**)': caffe_.cpp:(.text+0x343f): undefined reference to caffe::ReadSolverParamsFromTextFileOrDie(std::string const&, caffe::SolverParameter* )' /tmp/mex_286607035953408_13265/caffe_.o: 在函数std::string* google::MakeCheckOpString<int, int>(int const&, int const&, char const*)': caffe_.cpp:(.text._ZN6google17MakeCheckOpStringIiiEEPSsRKT_RKT0_PKc[_ZN6google17MakeCheckOpStringIiiEEPSsRKT_RKT0_PKc]+0x42): undefined reference to google::base::CheckOpMessageBuilder::NewString()' /tmp/mex_286607035953408_13265/caffe_.o: 在函数std::string* google::MakeCheckOpString<unsigned long, int>(unsigned long const&, int const&, char const*)': caffe_.cpp:(.text._ZN6google17MakeCheckOpStringImiEEPSsRKT_RKT0_PKc[_ZN6google17MakeCheckOpStringImiEEPSsRKT_RKT0_PKc]+0x42): undefined reference to google::base::CheckOpMessageBuilder::NewString()' collect2:错误:ld 返回 1 个退出状态

Makefile:511:目标“matlab/+caffe/private/caffe_.mexa64”的配方失败 make:*** [matlab/+caffe/private/caffe_.mexa64] 错误 255

有没有人在 Ubuntu 16.04 上成功编译过 Matcaffe?我还用 MATLAB R2014b 和 gcc 4.7 尝试了相同的过程,但没有任何成功。

4

1 回答 1

1

Caffe 是针对 libstdc++ 和 opencv 的系统版本编译的,但在运行 matcaffe 时会链接到 matlab 版本。我通过附加方便地解决了这个问题

export LD_PRELOAD=${LD_PRELOAD}:/usr/local/x86_64-linux-gnu/libstdc++.so.6

在构建 Caffe 时~/.bashrc禁用 opencv(取消注释USE_OPENCV := 0) 。Makefile.config

于 2016-11-22T09:01:45.200 回答