У 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
(без документації з цієї відповіді ) все ще відображається /Users/cris/matlab/get_data_pointer.mexmaci64
у своєму висновку. І зміна вихідного коду файлу MEX та його перекомпіляція демонструє, що дійсно, MEX-файл ніколи не перезавантажується, стара версія продовжує працювати до тих пір, поки не вийде MATLAB.
Я бачу це на MATLAB R2017a на macOS Mojave. Це ніколи не було проблемою з тією ж версією MATLAB під High Sierra.
Як змусити MATLAB завантажити MEX-файл без перезавантаження?