首页 > 解决方案 > matlab中无效的glmnet Mex文件

问题描述

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

有任何想法吗?

标签: macosmatlabmexglmnet

解决方案


glmnetMexGlmnet 下载中包含的MEX 文件在较新版本的 macOS 上看起来很复杂,因为它是在更旧版本的 macOS( OS X 10.8,根据他们的网站)上编译的,并且 DLL 库加载机制从那时起发生了变化。(它应该使用@rpath而不是@loader_path.)您需要自己重建 MEX 文件,或者联系 Glmnet 维护人员并要求他们提供新的构建。

要重建 MEX 文件:

  1. 设置 Matlabmex -setup以使用可以编译 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”将提出该问题。


推荐阅读