MATLAB non scarica più i file MEX dopo l'aggiornamento a macOS Mojave


10

In MATLAB, clear mex scarica tutti i file MEX dalla memoria (a meno che non siano bloccati). Nelle versioni precedenti di macOS, ero in grado di ricompilare un file MEX ed eseguire la versione modificata senza riavviare MATLAB, semplicemente emettendo un clear mexcomando. Questo non è più possibile sotto Mojave.

Ad esempio, prendi questo banale file 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]);
}

Possiamo creare il file MEX e caricarlo in memoria con

mex get_data_pointer.c
get_data_pointer(0)

Per cancellarlo,

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

inmemin effetti restituisce un array di celle vuoto che indica che nessun file MEX è caricato in memoria, ma version -modules(non documentato, da questa risposta ) mostra ancora /Users/cris/matlab/get_data_pointer.mexmaci64nel suo output. E cambiando il codice sorgente del file MEX e ricompilando si dimostra che, in effetti, il file MEX non viene mai ricaricato, la vecchia versione è ancora in esecuzione fino a quando non si esce da MATLAB.

Lo vedo su MATLAB R2017a su macOS Mojave. Questo non è mai stato un problema con la stessa versione MATLAB in High Sierra.

Come posso forzare MATLAB a scaricare il file MEX senza riavviare?


Hai compilato una segnalazione di bug?
Kamiccolo,

@Kamiccolo: No, non l'ho fatto. Ho l'impressione che questo sia un problema con il sistema operativo, ma non sono sicuro, potrebbe essere anche MATLAB. Quindi speravo di saperne di più prima di presentare una segnalazione di bug.
Cris Luengo,

2
Direi, non usare macOS Majove.
m7913d,

1
@ m7913d * Mojave
SS Anne,

2
@CrisLuengo: anche se è il sistema operativo che potrebbe causare il problema, è qualcosa su cui Mathworks deve indagare. Hanno MacOS, dubito che Apple abbia MATLAB disponibile. Vorrei Mathworks in una situazione del genere.
Daniel,

Risposte:


0

Questa è probabilmente la modifica di libstdc ++. Questa è una libreria di runtime che Apple ha deprecato un po 'di tempo fa (credo XCode 8) e alla fine è caduta completamente in XCode 10 e Mojave. Quindi il file MEX che hai è stato probabilmente compilato con una versione precedente.

Le regole di MathWorks sulla compatibilità dei file MEX prevedono che spesso funzioneranno tra le versioni, ma se si verifica una modifica incompatibile (come questa), è necessario ricompilare.


Come si può vedere dal testo della domanda, il problema si verifica con i file MEX compilati sulla stessa versione di MATLAB e sulla stessa versione del sistema operativo. In realtà ho dimostrato il problema con un semplice file MEX che ho compilato, eseguito e quindi ricompilato senza uscire da MATLAB.
Cris Luengo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.