MATLAB ne décharge plus les fichiers MEX après la mise à niveau vers macOS Mojave

10

Dans MATLAB, clear mexdécharge tous les fichiers MEX de la mémoire (sauf s'ils sont verrouillés). Sous les versions précédentes de macOS, j'ai pu recompiler un fichier MEX et exécuter la version modifiée sans redémarrer MATLAB, simplement en émettant une clear mexcommande. Ce n'est plus possible sous Mojave.

Par exemple, prenez ce fichier MEX trivial ( 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]);
}

Nous pouvons créer le fichier MEX et le charger en mémoire avec

mex get_data_pointer.c
get_data_pointer(0)

Pour l'effacer,

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

inmemrenvoie en effet un tableau de cellules vide indiquant qu'aucun fichier MEX n'est chargé en mémoire, mais version -modules(non documenté, à partir de cette réponse ) apparaît toujours /Users/cris/matlab/get_data_pointer.mexmaci64dans sa sortie. Et changer le code source du fichier MEX et recompiler démontre qu'en effet, le fichier MEX n'est jamais rechargé, l'ancienne version est toujours en cours d'exécution jusqu'à ce que l'on quitte MATLAB.

Je vois cela sur MATLAB R2017a sur macOS Mojave. Cela n'a jamais été un problème avec la même version MATLAB sous High Sierra.

Comment puis-je forcer MATLAB à décharger le fichier MEX sans redémarrer?

Cris Luengo
la source
Avez-vous rempli un rapport de bug?
Kamiccolo
@Kamiccolo: Non, je ne l'ai pas fait. J'ai l'impression que c'est un problème avec le système d'exploitation, mais je ne suis pas sûr, cela pourrait aussi être MATLAB. J'espérais donc en savoir plus à ce sujet avant de déposer un rapport de bogue.
Cris Luengo
2
Je dirais, n'utilisez pas macOS Majove.
m7913d
1
@ m7913d * Mojave
SS Anne
2
@CrisLuengo: Même si c'est le système d'exploitation qui pourrait causer le problème, c'est quelque chose que Mathworks doit étudier. Ils ont MacOS, je doute que Apple ait MATLAB disponible. Je voudrais Mathworks dans une telle situation.
Daniel

Réponses:

0

C'est probablement le changement de libstdc ++. Il s'agit d'une bibliothèque d'exécution qu'Apple a déconseillée il y a un certain temps (XCode 8 je pense) et qui a finalement été complètement abandonnée dans XCode 10 et Mojave. Donc, le fichier MEX que vous avez a probablement été compilé avec une version plus ancienne.

Les règles MathWorks sur la compatibilité des fichiers MEX sont qu'elles fonctionnent souvent entre les versions, mais s'il y a un changement incompatible (comme celui-ci), alors vous devez recompiler.

MPG
la source
Comme vous pouvez le voir dans le texte de la question, le problème se produit avec les fichiers MEX compilés sur la même version de MATLAB et la même version du système d'exploitation. En fait, je démontre le problème avec un simple fichier MEX que j'ai compilé, exécuté, puis recompilé sans quitter MATLAB.
Cris Luengo