【发布时间】:2020-03-07 17:21:41
【问题描述】:
在 MATLAB 中,clear mex 从内存中卸载所有 MEX 文件(除非它们被锁定)。在以前的 macOS 版本下,我能够重新编译 MEX 文件并运行修改后的版本,而无需重新启动 MATLAB,只需发出 clear mex 命令即可。这在 Mojave 下不再可能。
例如,使用这个简单的 MEX 文件 (get_data_pointer.c):
#include "mex.h"
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
plhs[0] = mxCreateNumericMatrix(1, 1, mxUINT64_CLASS, mxREAL);
*(uint64_t*)mxGetData(plhs[0]) = (uint64_t)mxGetData(prhs[0]);
}
我们可以创建 MEX 文件并将其加载到内存中
mex get_data_pointer.c
get_data_pointer(0)
要清除它,
clear mex
[~,mexfiles] = inmem
version -modules
inmem 确实返回一个空单元格数组,表示内存中没有加载任何 MEX 文件,但version -modules(未记录,来自this answer)仍然在其输出中显示/Users/cris/matlab/get_data_pointer.mexmaci64。更改 MEX 文件源代码并重新编译表明,确实,MEX 文件从未重新加载,旧版本仍在运行,直到退出 MATLAB。
我在 macOS Mojave 上的 MATLAB R2017a 上看到了这一点。在 High Sierra 下使用相同的 MATLAB 版本从来都不是问题。
如何强制 MATLAB 在不重新启动的情况下卸载 MEX 文件?
【问题讨论】:
-
您是否填写了错误报告?
-
@Kamiccolo:不,我没有。我的印象是这是操作系统的问题,但我不确定,它也可能是 MATLAB。所以我希望在提交错误报告之前了解更多信息。
-
我想说,不要使用 macOS Majove。
-
@m7913d *莫哈韦
-
@CrisLuengo:即使是操作系统可能导致问题,这也是 Mathworks 必须调查的内容。他们有 MacOS,我怀疑苹果有 MATLAB。我会在这种情况下使用 Mathworks。
标签: c macos matlab shared-libraries mex