搭载Big Sur的Mac M1设备编译MATLAB版SPM12报错如何解决
M1芯片Mac Big Sur系统SPM12编译失败解决方案
报错根因
MATLAB R2020a为纯Intel架构版本,在M1芯片设备上通过Rosetta 2转译运行时,mex命令无法自动识别当前设备架构,触发编译失败。
方案一:无需更换MATLAB版本
- 清理历史编译缓存
进入spm12/src目录,执行命令清理之前的错误编译产物:make distclean - 指定x86架构执行编译
执行命令时主动声明用x86_64架构运行,不需要修改终端默认配置:arch -x86_64 make && arch -x86_64 make install - 可选调整:修改Makefile配置
如果执行上一步仍报错,打开spm12/src目录下的Makefile文件,找到MacOS编译相关配置段:- 给所有mex编译参数添加
-arch x86_64标识,示例:mex -O -largeArrayDims -arch x86_64 -c spm_vol_utils.c - 在CFLAGS和LDFLAGS配置行末尾添加
-arch x86_64参数
保存修改后重新执行编译命令即可。
- 给所有mex编译参数添加
方案二:长期兼容方案
升级MATLAB到R2020b及以上版本,该版本开始原生支持Apple Silicon架构,无需转译即可正确识别设备架构,按原有教程步骤直接编译即可。
后续权限验证
编译完成后如果弹出mex文件无法运行的提示,重新执行以下两条命令放行权限即可:
sudo xattr -r -d com.apple.quarantine ./Downloads/spm12/
sudo find ./Downloads/spm12/ -name \*.mexmaci64 -exec spctl --add {} \;
内容的提问来源于stack exchange,提问作者Maxime Carriere
相关产品推荐
相关产品推荐

