macOS+matlab 2020b matlab_bgl工具箱使用时 MEX文件编译出错

本文介绍了在64位macOS上使用matlab_bgl工具箱时遇到的“mex -setup”和“maci64”文件编译问题的解决方法。首先,根据Matlab版本选择合适的xcode,配置编译环境。然后,详细说明了如何修改boost库文件以解决编译错误,包括手动修复boost和yasmic文件中的问题,并提供创建新编译脚本的步骤。通过这些步骤,可以成功编译maci64文件,使matlab_bgl工具箱正常工作。
摘要由CSDN通过智能技术生成

引言

对于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工具箱可以正常工作。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值