MATLAB không còn tải các tệp MEX sau khi nâng cấp lên macOS Mojave


10

Trong MATLAB, clear mexdỡ 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 mexlệ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

inmemthự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.mexmaci64trong đầ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?


Bạn đã điền một báo cáo lỗi?
Kamiccolo

@Kamiccolo: Không, tôi chưa. Tôi có ấn tượng rằng đây là một vấn đề với HĐH, nhưng tôi không chắc, đó cũng có thể là MATLAB. Vì vậy, tôi đã hy vọng tìm hiểu thêm về nó trước khi nộp báo cáo lỗi.
Cris Luengo

2
Tôi muốn nói, đừng sử dụng macOS Majove.
m7913d

1
@ m7913d * Mojave
SS Anne

2
@CrisLuengo: Ngay cả khi đó là HĐH có thể gây ra sự cố, đó là điều mà Mathworks phải điều tra. Họ có MacOS, tôi nghi ngờ apple có MATLAB. Tôi sẽ Mathworks trong tình huống như vậy.
Daniel

Câu trả lời:


0

Đó có lẽ là sự thay đổi libstdc ++. Đây là một thư viện thời gian chạy mà Apple không dùng nữa cách đây khá lâu (tôi nghĩ là XCode 8) và cuối cùng đã bỏ hoàn toàn trong XCode 10 và Mojave. Vì vậy, tệp MEX bạn có thể đã được biên dịch với phiên bản cũ hơn.

Các quy tắc MathWorks về khả năng tương thích tệp MEX là chúng sẽ thường hoạt động giữa các phiên bản, nhưng nếu có thay đổi không tương thích (như phiên bản này), thì bạn cần phải biên dịch lại.


Như bạn có thể biết từ văn bản câu hỏi, sự cố xảy ra với các tệp MEX được biên dịch trên cùng một phiên bản MATLAB và cùng một phiên bản HĐH. Tôi thực sự chứng minh vấn đề với một tệp MEX đơn giản mà tôi đã biên dịch, chạy và sau đó được biên dịch lại mà không thoát khỏi MATLAB.
Cris Luengo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.