引言
对于matlab_bgl工具箱来说,要在64 位 mac 上使用最新版本的 Matlab 进行编译时,需要使用者手动进行一些配置,在成功配置之后,决定将一系列过程整理成文,供大家参考。
解决“mex -setup”出错的问题
参考macOS+MatlabR2018b解决“错误使用mex -setup”问题(配置xcode10)。
在选择安装的xcode版本的时候,一定要注意与Matlab版本对应的compile编辑版本,可以从System Requirements and Supported Compilers找到对应的版本,例如我的电脑安装的是MatlabR2020b,则需要下载 xcode10.x / xcode11.x。
配置完成之后,输入“mex -setup”,出现
则mex编译设置成功。
解决“maci64”文件编译出错的问题
不管是之前工具包中存在“maci64”结尾的文件但是运行出现问题的,或者是本来就没有的,都可以采用以下的方法进行更新。
参考:compiling for maci46.
本人出现的问题是:
6): Library not loaded: @loader_path/libmex.dylib
Referenced from:
/Users/…/matlab_bgl_all_sp_mex.mexmaci64
Reason: image not found.
具体步骤为:
1.下载boost 1.36.0, 下载链接Boost Version History;
2.将boost_1_36_0/boost/graph中的所有’next(’ 改成 ‘boost::next(’,可以利用Sublime Text 3实现(下载链接Download):
此时会将./boost/graph/push_relabel_max_flow.hpp:430 中的‘topo_next(n)’也改变了,因此需要手动打开push_relabel_max_flow.hpp文件,找到430行,把‘topo_boost::next(n)’改回‘topo_next(n)’。
如果后续运行仍出现以下问题的话:
继续打开./yasmic/boost_mod/is_straight_line_drawing.hpp:188,修改’next(’ 为 ‘boost::next(’。
3.在终端中运行以下命令以创建新的compile-macosx-intel-64-large.sh
#!/bin/bash -e
BOOST_DIR=${HOME}/dev/lib/boost_1_36_0/
注意BOOST_DIR需要改成自己的boost所在路径
YASMIC_DIR=.../matlab_bgl/libmbgl/
YASMIC_DIR需要改成matlab_bgl中yasmic文件夹所在位置
source ccfiles.sh
OFILES=`echo ${CCFILES} | sed -e 's/\.cc/\.o/g'`
CFLAGS="-O2 -arch x86_64 -DMATLAB_BGL_LARGE_ARRAYS -fPIC -c -I${BOOST_DIR} -I${YASMIC_DIR}"
#CFLAGS="-g -W -DMATLAB_BGL_LARGE_ARRAYS -fPIC -c -I${BOOST_DIR} -I${YASMIC_DIR}"
function echocmd {
echo $@
$@
}
for file in ${CCFILES}; do
echocmd g++ $CFLAGS $file
done
echocmd ar rc libmbgl-macosx-intel-64-large.a ${OFILES}
echocmd rm ${OFILES}
理论上此时会在…/matlab_bgl/libmbgl/中创建新的libmbgl-macosx-intel-64-large.a:
4. 打开…/matlab_bgl/private/compile.m,添加以下代码至switch循环中:
case 'MACI64'
libname = 'mbgl-macosx-intel-64-large';
large_arrays = 1;
5. 接下来的步骤,需要在终端中运行
cd .../matlab_bgl/libmbgl
sh compile-macosx-intel-64-large.sh
但此时本人文件夹中并未存在compile-macosx-intel-64-large.sh文件,因此是直接在Matlab中运行compile.m,也编译成功了。
由此完成mex编译maci64文件工作,matlab_bgl工具箱可以正常工作。