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


10

У MATLAB clear mexвивантажує всі MEX-файли з пам'яті (якщо вони не заблоковані). У попередніх версіях macOS мені вдалося перекомпілювати MEX-файл і запустити модифіковану версію без перезавантаження MATLAB, просто видавши clear mexкоманду. Це неможливо в Mojave.

Наприклад, візьміть цей тривіальний 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: Ні, ні. У мене таке враження, що це проблема з ОС, але я не впевнений, це може бути і MATLAB. Тому я сподівався дізнатися більше про це, перш ніж подавати звіт про помилку.
Кріс Луенго

2
Я б сказав, не використовуйте macOS Majove.
m7913d

1
@ m7913d * Mojave
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.