MATLAB tidak lagi membongkar file MEX setelah memutakhirkan ke macOS Mojave

10

Di MATLAB, clear mexbongkar semua file MEX dari memori (kecuali jika terkunci). Di bawah versi macOS sebelumnya, saya dapat mengkompilasi ulang file MEX dan menjalankan versi modifikasi tanpa me-restart MATLAB, hanya dengan mengeluarkan clear mexperintah. Ini tidak lagi mungkin di bawah Mojave.

Misalnya, ambil file MEX sepele ini ( 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]);
}

Kita dapat membuat file MEX dan memuatnya dengan memori

mex get_data_pointer.c
get_data_pointer(0)

Untuk membersihkannya,

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

inmemmemang mengembalikan array sel kosong yang menunjukkan tidak ada file-MEX dimuat dalam memori, Tapi version -modules(tidak berdokumen, dari jawaban ini ) masih menunjukkan /Users/cris/matlab/get_data_pointer.mexmaci64dalam outputnya. Dan mengubah kode sumber file MEX dan kompilasi ulang menunjukkan bahwa, memang, file MEX tidak pernah dimuat ulang, versi lama masih dijalankan hingga keluar dari MATLAB.

Saya melihat ini di MATLAB R2017a di macOS Mojave. Ini tidak pernah menjadi masalah dengan versi MATLAB yang sama di bawah High Sierra.

Bagaimana saya bisa memaksa MATLAB untuk membongkar file MEX tanpa memulai ulang?

Cris Luengo
sumber
Sudahkah Anda mengisi laporan bug?
Kamiccolo
@ Kamiccolo: Tidak, saya belum. Saya mendapat kesan bahwa ini adalah masalah dengan OS, tapi saya tidak yakin, bisa juga MATLAB. Jadi saya berharap untuk mempelajari lebih lanjut tentang hal itu sebelum mengajukan laporan bug.
Cris Luengo
2
Saya akan mengatakan, jangan gunakan macOS Majove.
m7913d
1
@ m7913d * Mojave
SS Anne
2
@ ChrisLuengo: Bahkan jika itu adalah OS yang mungkin menyebabkan masalah, itu adalah sesuatu yang harus diselidiki oleh Mathworks. Mereka memiliki MacOS, saya ragu apel memiliki MATLAB tersedia. Saya akan Mathworks dalam situasi seperti itu.
Daniel

Jawaban:

0

Itu mungkin perubahan libstdc ++. Ini adalah pustaka runtime yang ditinggalkan Apple cukup lama (XCode 8 saya pikir) dan akhirnya jatuh sepenuhnya di XCode 10 dan Mojave. Jadi file MEX yang Anda miliki mungkin dikompilasi dengan versi yang lebih lama.

Aturan MathWorks tentang kompatibilitas file MEX adalah bahwa mereka akan sering bekerja di antara versi, tetapi jika ada perubahan yang tidak kompatibel (seperti ini), maka Anda perlu melakukan kompilasi ulang.

MPG
sumber
Seperti yang Anda tahu dari teks pertanyaan, masalah terjadi pada file MEX yang dikompilasi pada versi MATLAB yang sama dan versi OS yang sama. Saya benar-benar menunjukkan masalah dengan file MEX sederhana yang saya kompilasi, jalankan, dan kemudian kompilasi ulang tanpa keluar dari MATLAB.
Cris Luengo