未加载库:matlab中的@loader_path/libmex.dylib

bjg7j2ky  于 2023-04-12  发布在  Matlab
关注(0)|答案(3)|浏览(205)

macos high sierra 10.13.1 xcode 9.2 matlab 2017b
在2017 b版本的mac matlab中运行程序时,我试图从这个link运行pmtk 3,在运行第二个命令时出现以下错误
1.步骤:
1.运行initPmtk3.m(需要几分钟)
1.运行testPmtk3.m(耗时不到一分钟)
1.运行runDemos.m(大约需要1小时)
错误:

'/Users/laxmikadariya/Documents/MATLAB/pmtk3-master/pmtksupportCopy/markSchmidt-9march2011/markSchmidt/minFunc/lbfgsC.mexmaci64':
dlopen(/Users/laxmikadariya/Documents/MATLAB/pmtk3-master/pmtksupportCopy/markSchmidt-9march2011/markSchmidt/minFunc/lbfgsC.mexmaci64,
6): Library not loaded: @loader_path/libmex.dylib
  Referenced from:
  /Users/laxmikadariya/Documents/MATLAB/pmtk3-master/pmtksupportCopy/markSchmidt-9march2011/markSchmidt/minFunc/lbfgsC.mexmaci64
    Reason: image not found.

如何在matlab mac中解决这个问题?
我尝试将.bash_profile中的DYLD_LIBRARY_PATH设置为DYLD_LIBRARY_PATH ='/Applications/MATLAB_R2017b.app/bin/maci 64:/Applications/MATLAB_R2017b.app/sys/os/maci 64'
这不能解决问题

bn31dyow

bn31dyow1#

lbfgsC.mexmaci64文件是预编译的,并且带有2012年的时间戳。从那时起,MacOS上的许多事情都发生了变化...:)
在终端窗口中,我尝试:

$> otool -L lbfgsC.mexmaci64
lbfgsC.mexmaci64:
    @loader_path/libmx.dylib (compatibility version 0.0.0, current version 0.0.0)
    @loader_path/libmex.dylib (compatibility version 0.0.0, current version 0.0.0)
    @loader_path/libmat.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)

正如你所看到的,它使用@loader_path引用MATLAB的库,这是错误的,应该是@rpath
我尝试从MATLAB命令提示符重新编译MEX文件:

>> cd pmtk3/pmtksupportCopy/markSchmidt-9march2011/markSchmidt/minFunc
>> mex -compatibleArrayDims lbfgsC.c

-compatibleArrayDims选项是必要的,因为代码非常旧,并且使用int作为数组大小(32位),而不是mwSize(64位)。
在终端窗口中,我现在看到:

$> otool -L lbfgsC.mexmaci64
lbfgsC.mexmaci64:
    @rpath/libmx.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)

这看起来好多了,它使用了@rpath。MEX文件现在运行了,这意味着链接器问题解决了。
在同一目录下还有一个MEX文件,它也会有同样的问题。你必须同时编译它:

>> mex -compatibleArrayDims mcholC.c
abithluo

abithluo2#

您必须将库添加到matlab启动脚本中
/Applications/MATLAB_R2017b.app/bin/.matlab7rc.sh .

DYLD_LIBRARY_PATH="/Applications/MATLAB_R2017b.app/bin/maci64:/Applications/MATLAB_R2017b.app/sys/os/maci64"
然后从命令行启动matlab
/Applications/MATLAB_R2017b.app/bin/matlab

wribegjk

wribegjk3#

正如Cris Luengo在评论中指出的那样,标题中的错误来自于当您尝试从Matlab运行mex文件时,但尚未将其设置为通过mex -setup运行mex文件
对于较新版本的MacOS(对我来说是13.0.1),如果你没有安装XCode,你必须从App Store安装,打开它,接受它的许可协议,然后从Matlab提示符运行mex -setup

相关问题