Mac MATLAB R2017b运行pmtk3时libmex.dylib加载失败求助
解决pmtk3在MATLAB R2017b macOS环境下libmex.dylib找不到的问题
我之前在类似的macOS+MATLAB环境里遇到过一模一样的问题,本质是预编译的mex文件依赖路径和当前MATLAB安装路径不匹配,再加上macOS的SIP安全机制限制了环境变量的作用,给你几个靠谱的解决办法:
方法一:重新编译mex文件(最推荐)
预编译的lbfgsC.mexmaci64是针对特定MATLAB版本和路径编译的,重新编译能彻底解决依赖问题:
- 打开MATLAB,在命令行里导航到mex文件所在目录:
cd '/Users/laxmikadariya/Documents/MATLAB/pmtk3-master/pmtksupportCopy/markSchmidt-9march2011/markSchmidt/minFunc' - 执行编译命令:
mex lbfgsC.c - 编译完成后,原来的旧mex文件会被替换,此时再运行
testPmtk3.m应该就能正常执行了
方法二:手动修复mex文件的依赖路径
如果不想重新编译,可以用macOS的install_name_tool修改现有mex文件的库指向:
- 打开终端,进入目标目录:
cd /Users/laxmikadariya/Documents/MATLAB/pmtk3-master/pmtksupportCopy/markSchmidt-9march2011/markSchmidt/minFunc - 先查看当前的依赖情况(确认libmex.dylib的路径):
otool -l lbfgsC.mexmaci64 | grep -A 5 -B 2 libmex.dylib - 修改依赖路径为你MATLAB的实际安装路径:
install_name_tool -change @loader_path/libmex.dylib /Applications/MATLAB_R2017b.app/bin/maci64/libmex.dylib lbfgsC.mexmaci64 - 如果后续还出现类似
libmx.dylib找不到的错误,用同样的方法替换对应的路径即可
方法三:通过启动脚本设置MATLAB环境变量
macOS的System Integrity Protection(SIP)会在启动GUI应用时清除DYLD_LIBRARY_PATH,所以直接在.bash_profile里设置没用,需要通过脚本启动MATLAB:
- 在终端里创建一个启动脚本:
nano start_matlab.sh - 写入以下内容:
#!/bin/bash export DYLD_LIBRARY_PATH='/Applications/MATLAB_R2017b.app/bin/maci64:/Applications/MATLAB_R2017b.app/sys/os/maci64' open -a /Applications/MATLAB_R2017b.app - 保存并退出(按
Ctrl+O,回车,再Ctrl+X),然后给脚本加执行权限:chmod +x start_matlab.sh - 以后通过这个脚本启动MATLAB,再运行pmtk3的测试命令即可
额外注意事项
- 确保Xcode命令行工具已经安装,执行
xcode-select --install可以检查并安装 - 如果重新编译时遇到错误,执行
mex -setup在MATLAB里选择Xcode作为默认编译器
内容的提问来源于stack exchange,提问作者Laxmi Kadariya
相关产品推荐
相关产品推荐

