macOS Mojaveにアップグレードした後、MATLABがMEXファイルをアンロードしない


10

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ファイルを強制的にアンロードさせるにはどうすればよいですか?


バグレポートを記入しましたか?
Kamiccolo

@Kamiccolo:いいえ、私はしていません。これはOSの問題だと思いますが、MATLABの可能性もあります。だから私はバグ報告を提出する前にそれについてもっと知りたいと思っていました。
クリスLuengo

2
macOS Majoveは使用しないでください。
m7913d

1
@ m7913d * Mojave
SS Anne、

2
@CrisLuengo:問題の原因がOSであっても、Mathworksで調査する必要があります。彼らはMacOSを持っています。そのような状況ではMathworksを使用します。
ダニエル

回答:


0

それはおそらくlibstdc ++の変更です。これは、かなり前にAppleが非推奨にしたランタイムライブラリ(XCode 8だと思います)で、ついにXCode 10とMojaveで完全に削除されました。したがって、お持ちのMEXファイルはおそらく古いバージョンでコンパイルされています。

MEXファイルの互換性に関する MathWorksのルールは、バージョン間で機能することが多いということですが、互換性のない変更(この変更など)がある場合は、再コンパイルする必要があります。


質問テキストからわかるように、問題は同じバージョンのMATLABと同じバージョンのOSでコンパイルされたMEXファイルで発生します。実際に、MATLABを終了せずにコンパイル、実行、再コンパイルした単純なMEXファイルを使用して問題を示しています。
クリスLuengo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.