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 文件:
- 使用
mex -setup
设置 Matlab 以使用可以编译 Fortran MEX 文件的编译器。 (我实际上不知道该怎么做。)
- 在Matlab中,
cd
到glmnet_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。
我在 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 文件:
- 使用
mex -setup
设置 Matlab 以使用可以编译 Fortran MEX 文件的编译器。 (我实际上不知道该怎么做。) - 在Matlab中,
cd
到glmnet_matlab
目录,!rm glmnetMex.mexmaci64
,然后运行mex glmnetMex.F
我认为这是 Glmnet 发行版中的一个错误;我已将其报告给上游的 Glmnet 维护者。
(我也可以通过在我的 macOS 10.14.6 机器 运行 上使用 Matlab R2019a 重新下载 Glmnet 来重现这个问题。)
这是另一个 Matlab 库的预构建 MEX 文件的类似问题:
@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。