MATLAB entlädt nach dem Upgrade auf macOS Mojave keine MEX-Dateien mehr

10

Entlädt in MATLAB clear mexalle MEX-Dateien aus dem Speicher (sofern sie nicht gesperrt sind). In früheren Versionen von macOS konnte ich eine MEX-Datei neu kompilieren und die geänderte Version ausführen, ohne MATLAB neu zu starten, indem ich einfach einen clear mexBefehl ausgab. Dies ist unter Mojave nicht mehr möglich.

Nehmen Sie zum Beispiel diese triviale MEX-Datei ( 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]);
}

Wir können die MEX-Datei erstellen und mit in den Speicher laden

mex get_data_pointer.c
get_data_pointer(0)

Um es zu klären,

clear mex
[~,mexfiles] = inmem
version -modules

inmemgibt zwar ein leeres Zellenarray zurück, das angibt, dass keine MEX-Dateien in den Speicher geladen sind, aber version -modules(undokumentiert, aus dieser Antwort ) wird immer noch /Users/cris/matlab/get_data_pointer.mexmaci64in seiner Ausgabe angezeigt. Das Ändern des Quellcodes der MEX-Datei und das erneute Kompilieren zeigen, dass die MEX-Datei zwar nie neu geladen wird, die alte Version jedoch noch ausgeführt wird, bis MATLAB beendet wird.

Ich sehe dies auf MATLAB R2017a unter macOS Mojave. Dies war mit derselben MATLAB-Version unter High Sierra nie ein Problem.

Wie kann ich MATLAB zwingen, die MEX-Datei ohne Neustart zu entladen?

Cris Luengo
quelle
Haben Sie einen Fehlerbericht ausgefüllt?
Kamiccolo
@Kamiccolo: Nein, habe ich nicht. Ich habe den Eindruck, dass dies ein Problem mit dem Betriebssystem ist, aber ich bin mir nicht sicher, ob es auch MATLAB sein könnte. Ich hatte gehofft, mehr darüber zu erfahren, bevor ich einen Fehlerbericht einreichte.
Cris Luengo
2
Ich würde sagen, verwenden Sie nicht macOS Majove.
m7913d
1
@ m7913d * Mojave
SS Anne
2
@CrisLuengo: Auch wenn es das Betriebssystem ist, das das Problem verursachen könnte, muss Mathworks dies untersuchen. Sie haben MacOS, ich bezweifle, dass Apple MATLAB zur Verfügung hat. Ich würde Mathworks in einer solchen Situation.
Daniel

Antworten:

0

Das ist wahrscheinlich die libstdc ++ Änderung. Dies ist eine Laufzeitbibliothek, die Apple vor einiger Zeit veraltet hat (XCode 8, glaube ich) und die schließlich vollständig in XCode 10 und Mojave gelöscht wurde . Die MEX-Datei, die Sie haben, wurde wahrscheinlich mit einer älteren Version kompiliert.

Die MathWorks- Regeln zur MEX-Dateikompatibilität lauten, dass sie häufig zwischen Versionen funktionieren. Wenn jedoch eine inkompatible Änderung (wie diese) vorliegt, müssen Sie sie neu kompilieren.

MPG
quelle
Wie Sie dem Fragentext entnehmen können, tritt das Problem bei MEX-Dateien auf, die mit derselben Version von MATLAB und derselben Version des Betriebssystems kompiliert wurden. Ich demonstriere das Problem tatsächlich mit einer einfachen MEX-Datei, die ich kompiliert, ausgeführt und dann neu kompiliert habe, ohne MATLAB zu beenden.
Cris Luengo