MATLAB 2017a编译gpb代码
MATLAB 2017a编译gpb代码
实验环境
fedora 24
matlab 2017a
gpb源码地址
编译过程
编译过程-1
cd grouping/source
mkdir build && cd build
cmake ../ && make
mv *.so ../../lib
cd ../..
export LD_LIBRARY_PATH=$(pwd)/lib:/usr/lib
到目前为止的编译过程我没有遇到问题(上述过程来源于gpb源码的readme)
编译过程-2
addpath(genpath('./'))
compile
compile 出现问题
问题1:mex函数出错,gcc版本不符合,现有的版本不是gcc 4.9(大概意思)
解决方案:参考网站
(为了防止参考网站失去连接,我也具体写一下)
# 下载CentOS 7 SCL源
# 百度云地址:https://pan.baidu.com/s/1hrPJtB2
# 下载后解压,将其中的repo文件和key文件复制到/etc/目录下:
sudo cp ./etc/* /etc -rf
# 安装devtoolset-3-gcc-c++
sudo dnf install devtoolset-3-gcc-c++
# 安装完毕,若要在当前控制台使用gcc 4.9 使用命令
scl enable devtoolset-3 bash
问题2:compile.m 55行出错,显示undefined reference to ex_index_out_of_bounds.cc
解决方案:
(1)undefined reference to 的原因是matlab找不到声明函数的实现文件
(2)
% 第55行的代码
mex ./matlab/segmentation/mex_contour_sides.cc -I./include
% 将上述代码修改为
mex ./matlab/segmentation/mex_contour_sides.cc -I./include -L./ -L../../lib -lopencv_gpb
问题3:compile.m 81行出错,显示undefined reference to cv::Mat::deallcate(大概类似)
解决方案:
% 第81行代码
mex ./buildW.cpp -I./util -L../../lib -lopencv_gpb
% 将上述代码修改为
mex ./buildW.cpp -I./util -L../../lib -lopencv_gpb -L/usr/local/lib -lopencv_core
解释:-L/usr/local/lib -lopencv_core 的意思是链接声明的编译文件位于opencv的libopencv_core.so,所以找到你电脑上的改文件选填
问题4:compile 94行会有 vector is not declared in this scope(大致意思)
解决方案: 在vector之前添加std::,最终std::vector<>
问题5:contours2ucm.m 第58行 未定义变量rows
解决方案:通过查询代码,其意思大致为得到矩阵的行列
% 第58行
for i=1:rows(seg4)-1,
for j=1:columns(seg4)-1,
% 将其修改为
[row column]=size(seg4);
for i=1:row-1,
for j=1:column-1,
至此我在编译过程中遇到的的问题解决完了。
验证编译
example
问题1:
Error using gca
'/usr/local/MATLAB/R2016a/bin/glnxa64/libmwosgserver.so':
/usr/local/MATLAB/R2016a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6:
version 'CXXABI_1.3.8' not found (required by /lib64/libGLU.so.1)
大约类似这个,总之就是matlab 2017a不能显示图像,命令行执行imshow(‘image.png’)要不就是busy,要不就报错
解决方案:
参考网站1这个网站描述跟我问题符合,但是并没解决我的问题
参考网站2这个网站内容解决了我的问题,为了防止原网站失效,将解决方案粘贴如下:
What I did was I edited a file called .matlab7rc.sh (located in "path_to_ matlab/bin" folder and its hidden) and uncommented all lines that were(there are several of them):
LDPATH_PREFIX='$MATLAB/sys/opengl/lib/$ARCH'
同时,还有意外之喜,原本我的R2017a 点击右上角的x没有反应,必须得强制关闭,但是经此修改之后,点x可以关闭matlab了。