MATLAB nie usuwa już plików MEX po aktualizacji do macOS Mojave

10

W MATLAB, clear mexzwalnia wszystkie pliki MEX z pamięci (chyba że są zablokowane). W poprzednich wersjach systemu macOS mogłem ponownie skompilować plik MEX i uruchomić zmodyfikowaną wersję bez ponownego uruchamiania MATLAB, po prostu wydając clear mexpolecenie. Nie jest to już możliwe w ramach Mojave.

Weźmy na przykład ten trywialny plik 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]);
}

Możemy utworzyć plik MEX i załadować go do pamięci za pomocą

mex get_data_pointer.c
get_data_pointer(0)

Aby to wyczyścić,

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

inmemrzeczywiście zwraca pustą tablicę komórek wskazującą, że żadne pliki MEX nie są załadowane do pamięci, ale version -modules(nieudokumentowane, z tej odpowiedzi ) nadal pokazuje /Users/cris/matlab/get_data_pointer.mexmaci64na wyjściu. A zmiana kodu źródłowego pliku MEX i ponowna kompilacja pokazuje, że plik MEX nigdy nie jest ponownie ładowany, stara wersja jest nadal uruchomiona, dopóki nie wyjdzie z MATLAB.

Widzę to na MATLAB R2017a na macOS Mojave. To nigdy nie było problemem z tą samą wersją MATLAB w High Sierra.

Jak zmusić MATLAB do zwolnienia pliku MEX bez ponownego uruchamiania?

Cris Luengo
źródło
Czy wypełniłeś raport o błędzie?
Kamiccolo,
@Kamiccolo: Nie, nie mam. Mam wrażenie, że jest to problem z systemem operacyjnym, ale nie jestem pewien, może to być również MATLAB. Miałem więc nadzieję dowiedzieć się więcej na ten temat przed zgłoszeniem błędu.
Cris Luengo,
2
Powiedziałbym, nie używaj macOS Majove.
m7913d
1
@ m7913d * Mojave
SS Anne
2
@CrisLuengo: Nawet jeśli przyczyną problemu może być system operacyjny, Mathworks musi to zbadać. Mają MacOS, wątpię czy Apple ma dostępną MATLAB. W takiej sytuacji wybrałbym Mathworks.
Daniel

Odpowiedzi:

0

To prawdopodobnie zmiana libstdc ++. Jest to biblioteka środowiska wykonawczego, która Apple przestała istnieć jakiś czas temu (chyba XCode 8), a ostatecznie całkowicie spadła w XCode 10 i Mojave. Więc plik MEX, który posiadasz, został prawdopodobnie skompilowany ze starszą wersją.

Reguły MathWorks dotyczące zgodności plików MEX są takie, że często będą działać między wersjami, ale jeśli wystąpi niezgodna zmiana (taka jak ta), musisz ponownie skompilować.

MPG
źródło
Jak widać z tekstu pytania, problem występuje w przypadku plików MEX skompilowanych w tej samej wersji MATLAB i tej samej wersji systemu operacyjnego. Właściwie demonstruję problem z prostym plikiem MEX, który skompilowałem, uruchomiłem, a następnie ponownie skompilowałem bez wychodzenia z MATLAB.
Cris Luengo,