matlab 中的 glmnet Mex 文件无效

Invalid glmnet Mex file in matlab

我在 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 的建议,但我不确定这是否可以解决我的问题。我在这里停了下来,因为我不确定我是否应该按照这个答案删除一些东西。

有什么想法吗?

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 维护者。

(我也可以通过在我的 macOS 10.14.6 机器 运行 上使用 Matlab R2019a 重新下载 Glmnet 来重现这个问题。)

这是另一个 Matlab 库的预构建 MEX 文件的类似问题:。下次尝试使用谷歌搜索错误消息的各个部分;搜索 "Library not loaded: @loader_path/libmex.dylib" 将提出该问题。

@Andrew Janke 的回答很有效,除了第二步我需要使用

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

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

我是 运行 MATLAB 2019a 和 MacOS 10.15.3。