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

时间:2018-01-26 09:30:04

标签: matlab

macos high sierra 10.13.1 xcode 9.2 matlab 2017b

在2017b版本的mac matlab中运行程序时,我试图从这个link运行pmtk3并且在运行时我在运行第二个命令时遇到以下错误

  1. 步骤:
    1. 运行initPmtk3.m(需要几分钟)
    2. 运行testPmtk3.m(不到一分钟)
    3. 运行runDemos.m(大约需要1小时)
  2. 错误:

    '/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 = '/应用/ MATLAB_R2017b.app / bin中/ maci64:/Applications/MATLAB_R2017b.app/sys/os/maci64'

    这无法解决问题

2 个答案:

答案 0 :(得分:4)

In [57]: str(MyClass(session).filter(MyClass.id==1)) Out[57]: 'SELECT "MyClass".id AS "MyClass_id", "MyClass".name AS "MyClass_name" FROM "MyClass" WHERE "MyClass".id = ?' 文件已预先编译,并带有2012年的时间戳。从那时起MacOS上的许多内容都发生了变化...... :)

在终端窗口中,我尝试了:

lbfgsC.mexmaci64

如您所见,它使用$> 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) 引用了MATLAB的库,这是错误的。那应该是@loader_path

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

@rpath

>> cd pmtk3/pmtksupportCopy/markSchmidt-9march2011/markSchmidt/minFunc >> mex -compatibleArrayDims lbfgsC.c 选项是必需的,因为代码非常旧,并且使用-compatibleArrayDims表示数组大小(32位),而不是int(64位)。

在终端窗口中,我现在看到:

mwSize

这看起来好多了,它应该使用$> 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) 。 MEX文件现在已运行,这意味着链接器问题已解决。

在同一目录中还有另一个MEX文件,它会遇到同样的问题。你必须同时编译那个:

@rpath

答案 1 :(得分:0)

您必须将库添加到您的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