Di MATLAB, clear mex
bongkar 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 mex
perintah. 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
inmem
memang 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.mexmaci64
dalam 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?
Jawaban:
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.
sumber