【问题标题】:Invalid glmnet Mex file in matlabmatlab中无效的glmnet Mex文件
【发布时间】:2019-12-23 13:48:47
【问题描述】:

我在 macOS 10.14.5 的 MATLAB 2019a 上运行 glmnet 包。我还在我的笔记本电脑上安装了 Xcode。

我收到如下错误:

Invalid MEX-file '/Users/Desktop/Research/Paper Code/glmnet/glmnetMex.mexmaci64' : dlopen(/Users/Desktop/Research/Paper Code/glmnet/glmnetMex.mexmaci64,
6): Library not loaded: @loader_path/libmex.dylib
  Referenced from: /Users/Desktop/Research/Paper Code/glmnet/glmnetMex.mexmaci64

我已经尝试了代码mex -setup并得到了

MEX configured to use 'Xcode with Clang' for C language compilation.
Warning: The MATLAB C and Fortran API has changed to support MATLAB variables with more than 2^32-1 elements. 
In the near future you will be required to update your code to utilize the new API. 
You can find more information about this at:  http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html.

我从mathworks 找到了一些针对mex 的建议,但我不确定这是否能解决我的问题。我在这里停了下来,因为我不确定我是否应该按照这个答案删除一些东西。

有什么想法吗?

【问题讨论】:

  • 您能否确定,您的路径中没有空格。例如。 《纸条码》
  • 您自己构建了 MEX 文件还是预编译了它?
  • 路径中的空格可以; Matlab 和 DLL 加载程序正确处理了这个问题,并且这个问题在没有空格的路径上重现。
  • 好问题!包含指向实际库的链接、系统信息和收到的确切错误消息会很有帮助。如果您还包括您运行的产生该错误消息的确切代码,这将很有帮助,以使回答者更容易重现该问题。 (我可以使用 Glmnet 中的示例代码轻松地做到这一点,但并不是每个问题都能以这种方式解决。)
  • @CrisLuengo 是预编译好的。

标签: macos matlab mex glmnet


【解决方案1】:

Glmnet 下载中包含的glmnetMex MEX 文件在较新版本的 macOS 上看起来很繁琐,因为它是在更旧版本的 macOS (OS X 10.8, according to their website) 上编译的,并且此后 DLL 库加载机制发生了变化。 (它应该使用@rpath 而不是@loader_path。)您需要自己重建 MEX 文件,或联系 Glmnet 维护人员并要求他们提供新的构建。

重建 MEX 文件:

  1. 使用mex -setup 设置 Matlab 以使用可以编译 Fortran MEX 文件的编译器。 (我实际上不知道该怎么做。)
  2. 在Matlab中,cdglmnet_matlab目录,!rm glmnetMex.mexmaci64,然后运行mex glmnetMex.F

我认为这是 Glmnet 发行版中的一个错误;我已将其报告给 Glmnet 维护人员。

(我也可以在运行 Matlab R2019a 的 macOS 10.14.6 机器上重新下载 Glmnet 来重现此问题。)

另一个 Matlab 库的预构建 MEX 文件存在类似问题:Library not loaded: @loader_path/libmex.dylib in matlab。下次尝试用谷歌搜索错误消息的各个部分;搜索“库未加载:@loader_path/libmex.dylib”将提出该问题。

【讨论】:

  • 非常感谢。但是按照这两个步骤后我仍然收到警告。我已经编辑了我的问题以使其更具体。也许这可以解释更多?
  • 不客气!那个新的错误/警告消息看起来与我完全无关。我建议您将其作为一个单独的问题发布。
【解决方案2】:

@Andrew Janke 的回答效果很好,除了我需要使用编译的第二步

mex FFLAGS='-fdefault-real-8 -ffixed-form -compatibleArrayDims' glmnetMex.F GLMnet.f

参见此处:https://github.com/growlix/glmnet_matlab

我正在使用 MacOS 10.15.3 运行 MATLAB 2019a。

【讨论】:

    猜你喜欢
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多