[MATLAB升级到macOS Mojave后不再卸载MEX文件

问题描述 投票:8回答:1

在MATLAB中,clear mex从内存中卸载所有MEX文件(除非它们已被锁定)。在macOS的早期版本中,仅通过发出clear mex命令,我就可以重新编译MEX文件并运行修改后的版本,而无需重新启动MATLAB。在莫哈韦沙漠(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文件?

[在MATLAB中,clear mex从内存中卸载所有MEX文件(除非它们已被锁定)。在macOS的早期版本中,我能够重新编译MEX文件并运行修改后的版本,而无需重新启动...

c macos matlab shared-libraries mex
1个回答
0
投票

这可能是libstdc ++的更改。这是一个运行库,Apple早已弃用了该库(我认为是XCode 8),最后完全放到了XCode 10和Mojave中。因此,您拥有的MEX文件可能是使用较旧的版本进行编译的。

© www.soinside.com 2019 - 2024. All rights reserved.