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

Lax*_*iya 5 matlab

macOS High Sierra 10.13.1 xcode 9.2 Matlab 2017b

在2017b版本的mac matlab中运行程序时,我尝试从此链接运行pmtk3 ,而在运行第二行命令时出现以下错误

  1. 脚步:
    1. 运行initPmtk3.m(需要几分钟)
    2. 运行testPmtk3.m(需要一分钟)
    3. 运行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.
Run Code Online (Sandbox Code Playgroud)

如何在Matlab Mac中解决此问题?

我试图将.bash_profile中的DYLD_LIBRARY_PATH设置为DYLD_LIBRARY_PATH ='/ Applications / MATLAB_R2017b.app / bin / maci64:/Applications/MATLAB_R2017b.app/sys/os/maci64'

这不能解决问题

Cri*_*ngo 5

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)
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它使用MATLAB引用的图书馆@loader_path,这是不对的。那应该是@rpath

我试图重新编译MEX文件,从MATLAB命令提示符:

>> cd pmtk3/pmtksupportCopy/markSchmidt-9march2011/markSchmidt/minFunc
>> mex -compatibleArrayDims lbfgsC.c
Run Code Online (Sandbox Code Playgroud)

-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)
Run Code Online (Sandbox Code Playgroud)

看起来好多了,@rpath它应该按原样使用。MEX文件现在已运行,这意味着链接程序问题已解决。

同一目录中还有另一个MEX文件,它将具有相同的问题。您必须同时编译一个:

>> mex -compatibleArrayDims mcholC.c
Run Code Online (Sandbox Code Playgroud)