MATLAB больше не выгружает MEX-файлы после обновления до macOS Mojave


10

В MATLAB clear mexвыгружает все MEX-файлы из памяти (если они не заблокированы). В предыдущих версиях macOS я мог заново скомпилировать MEX-файл и запустить измененную версию без перезапуска MATLAB, просто выполнив clear mexкоманду. Это больше невозможно при Мохаве.

Например, возьмем этот тривиальный 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]);
}

Мы можем создать MEX-файл и загрузить его в память

mex get_data_pointer.c
get_data_pointer(0)

Чтобы очистить это,

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

inmemдействительно возвращает пустой массив ячеек, указывающий, что MEX-файлы не загружены в память, но version -modules(недокументированный из этого ответа ) все еще отображается /Users/cris/matlab/get_data_pointer.mexmaci64в его выводе. И изменение исходного кода MEX-файла и его повторная компиляция демонстрируют, что MEX-файл действительно никогда не перезагружается, старая версия все еще запускается до тех пор, пока не выйдет из MATLAB.

Я вижу это на MATLAB R2017a на MacOS Mojave. Это никогда не было проблемой с той же версией MATLAB под High Sierra.

Как заставить MATLAB выгрузить MEX-файл без перезапуска?


Вы заполнили отчет об ошибке?
Kamiccolo

@ Kamiccolo: Нет, не имею. У меня сложилось впечатление, что это проблема с ОС, но я не уверен, что это может быть и MATLAB. Поэтому я надеялся узнать больше об этом, прежде чем подавать отчет об ошибке.
Крис

2
Я бы сказал, не используйте MacOS Majove.
m7913d

1
@ m7913d * Мохаве
SS Anne

2
@CrisLuengo: Даже если именно ОС может вызвать проблему, Mathworks должна исследовать это. У них есть MacOS, я сомневаюсь, что у Apple есть MATLAB. Я бы Mathworks в такой ситуации.
Даниил

Ответы:


0

Это вероятно изменение libstdc ++. Это библиотека времени выполнения, которую Apple давно устарела (я думаю, XCode 8), и, наконец, она полностью удалена в XCode 10 и Mojave. Итак, файл MEX, который у вас есть, вероятно, был скомпилирован с более старой версией.

Правила MathWorks по совместимости файлов MEX заключаются в том, что они часто работают между версиями, но если есть несовместимое изменение (например, это), вам нужно перекомпилировать.


Как видно из текста вопроса, проблема возникает с MEX-файлами, скомпилированными на той же версии MATLAB и той же версии ОС. Я на самом деле демонстрирую проблему с простым MEX-файлом, который я скомпилировал, запустил, а затем перекомпилировал без выхода из MATLAB.
Крис
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.