Trong MATLAB, clear mex
dỡ tất cả các tệp MEX khỏi bộ nhớ (trừ khi chúng bị khóa). Trong các phiên bản trước của macOS, tôi đã có thể biên dịch lại tệp MEX và chạy phiên bản sửa đổi mà không cần khởi động lại MATLAB, chỉ bằng cách ban hành clear mex
lệnh. Điều này không còn có thể dưới Mojave.
Ví dụ: lấy tệp MEX tầm thường này ( 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]);
}
Chúng ta có thể tạo tệp MEX và tải nó vào bộ nhớ với
mex get_data_pointer.c
get_data_pointer(0)
Để xóa nó,
clear mex
[~,mexfiles] = inmem
version -modules
inmem
thực sự trả về một mảng ô trống cho biết không có tệp MEX nào được tải trong bộ nhớ, nhưng version -modules
(không có tài liệu, từ câu trả lời này ) vẫn hiển thị /Users/cris/matlab/get_data_pointer.mexmaci64
trong đầu ra của nó. Và việc thay đổi mã nguồn tệp MEX và biên dịch lại chứng minh rằng, thực sự, tệp MEX không bao giờ được tải lại, phiên bản cũ vẫn đang được chạy cho đến khi thoát khỏi MATLAB.
Tôi đang thấy điều này trên MATLAB R2017a trên macOS Mojave. Điều này chưa bao giờ là vấn đề với cùng phiên bản MATLAB dưới High Sierra.
Làm cách nào tôi có thể buộc MATLAB tải tệp MEX mà không cần khởi động lại?