MATLAB ya no descarga archivos MEX después de actualizar a macOS Mojave


10

En MATLAB, clear mexdescarga todos los archivos MEX de la memoria (a menos que estén bloqueados). En versiones anteriores de macOS, pude volver a compilar un archivo MEX y ejecutar la versión modificada sin reiniciar MATLAB, simplemente emitiendo un clear mexcomando. Esto ya no es posible con Mojave.

Por ejemplo, tome este trivial archivo 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]);
}

Podemos crear el archivo MEX y cargarlo en la memoria con

mex get_data_pointer.c
get_data_pointer(0)

Para limpiarlo,

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

inmemde hecho, devuelve una matriz de celdas vacía que indica que no hay archivos MEX cargados en la memoria, pero version -modules(no documentado, a partir de esta respuesta ) todavía se muestra /Users/cris/matlab/get_data_pointer.mexmaci64en su salida. Y cambiar el código fuente del archivo MEX y volver a compilar demuestra que, de hecho, el archivo MEX nunca se vuelve a cargar, la versión anterior todavía se está ejecutando hasta que uno sale de MATLAB.

Estoy viendo esto en MATLAB R2017a en macOS Mojave. Esto nunca fue un problema con la misma versión de MATLAB en High Sierra.

¿Cómo puedo forzar a MATLAB a descargar el archivo MEX sin reiniciar?


¿Has completado un informe de error?
Kamiccolo

@Kamiccolo: No, no lo he hecho. Tengo la impresión de que este es un problema con el sistema operativo, pero no estoy seguro, podría ser MATLAB también. Así que esperaba aprender más sobre esto antes de presentar un informe de error.
Cris Luengo

2
Yo diría que no uses macOS Majove.
m7913d

1
@ m7913d * Mojave
SS Anne

2
@CrisLuengo: Incluso si es el sistema operativo el que puede causar el problema, eso es algo que Mathworks tiene que investigar. Tienen MacOS, dudo que Apple tenga MATLAB disponible. Me gustaría Mathworks en tal situación.
Daniel

Respuestas:


0

Ese es probablemente el cambio de libstdc ++. Esta es una biblioteca de tiempo de ejecución que Apple desaprobó hace bastante tiempo (creo que XCode 8) y finalmente se cayó por completo en XCode 10 y Mojave. Entonces, el archivo MEX que tiene probablemente se compiló con una versión anterior.

Las reglas de MathWorks sobre compatibilidad de archivos MEX es que a menudo funcionarán entre versiones, pero si hay un cambio incompatible (como este), entonces debe volver a compilar.


Como puede ver en el texto de la pregunta, el problema ocurre con los archivos MEX compilados en la misma versión de MATLAB y la misma versión del sistema operativo. De hecho, demuestro el problema con un simple archivo MEX que compilé, ejecuté y luego volví a compilar sin salir de MATLAB.
Cris Luengo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.