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

升级到macOS Mojave后,MATLAB不再卸载MEX文件,c,macos,matlab,shared-libraries,mex,C,Macos,Matlab,Shared Libraries,Mex,在MATLAB中,清除mex从内存中卸载所有mex文件(除非它们被锁定)。在以前版本的macOS中,我能够重新编译MEX文件并运行修改后的版本,而无需重新启动MATLAB,只需发出clear MEX命令。在莫哈韦统治下,这已经不可能了 例如,以这个简单的MEX文件(get\u data\u pointer.c)为例: #包括“mex.h” void MEX函数(int nlhs、mxArray*plhs[]、int nrhs、const mxArray*prhs[]) { plhs[0]=mxC

在MATLAB中,
清除mex
从内存中卸载所有mex文件(除非它们被锁定)。在以前版本的macOS中,我能够重新编译MEX文件并运行修改后的版本,而无需重新启动MATLAB,只需发出
clear MEX
命令。在莫哈韦统治下,这已经不可能了

例如,以这个简单的MEX文件(
get\u data\u pointer.c
)为例:

#包括“mex.h”
void MEX函数(int nlhs、mxArray*plhs[]、int nrhs、const mxArray*prhs[])
{
plhs[0]=mxCreateNumericMatrix(1,1,mxUINT64_类,mxREAL);
*(uint64_t*)mxGetData(plhs[0])=(uint64_t)mxGetData(prhs[0]);
}
我们可以创建MEX文件并将其加载到内存中

mex get_data_pointer.c
获取数据指针(0)
为了清理它

清除mex
[~,mexfiles]=inmem
版本-模块
inmem
确实返回一个空单元格数组,表示内存中没有加载MEX文件,但是
version-modules
(未记录,从)仍然在其输出中显示
/Users/cris/matlab/get\u data\u pointer.mexmaci64
。更改MEX文件源代码并重新编译表明,事实上,MEX文件从未重新加载,旧版本在退出MATLAB之前仍在运行

我在macOS Mojave的MATLAB R2017a上看到了这一点。在High Sierra下,使用相同的MATLAB版本时,这从来都不是问题


如何强制MATLAB卸载MEX文件而不重新启动?

这可能是libstdc++的更改。这是一个运行时库,苹果公司不久前(我想是XCode 8)就不推荐它了,最后完全放弃了它和Mojave。因此,您使用的MEX文件可能是使用旧版本编译的


MathWorks的问题是,它们通常在不同版本之间工作,但如果有不兼容的更改(如此),则需要重新编译。

您是否填写了错误报告?@Kamiccolo:没有。我的印象是,这是操作系统的一个问题,但我不确定,也可能是MATLAB的问题。所以我希望在提交错误报告之前能了解更多。我会说,不要使用macOS Majove。@m7913d*Mojave@CrisLuengo:即使是操作系统可能导致问题,这也是Mathworks必须调查的问题。他们有MacOS,我怀疑苹果有MATLAB。我会在这种情况下使用Mathworks。从问题文本中可以看出,问题发生在同一版本的MATLAB和同一版本的OS上编译的MEX文件上。实际上,我用一个简单的MEX文件演示了这个问题,我编译、运行了这个文件,然后在不退出MATLAB的情况下重新编译了它。