MATLABでは、clear mex
すべてのMEXファイルをメモリからアンロードします(ロックされている場合を除く)。以前のバージョンのmacOSでは、clear mex
コマンドを発行するだけで、MATLABを再起動せずにMEXファイルを再コンパイルして変更したバージョンを実行できました。これは、モハベではもはや不可能です。
たとえば、次の簡単な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を終了するまで古いバージョンが引き続き実行されます。
macOS Mojave上のMATLAB R2017aでこれを確認しています。これは、High Sierraで同じバージョンのMATLABで問題になることはありませんでした。
再起動せずにMATLABにMEXファイルを強制的にアンロードさせるにはどうすればよいですか?