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

@Kamiccolo: ไม่ฉันยังไม่ได้ ฉันรู้สึกว่านี่เป็นปัญหาของระบบปฏิบัติการ แต่ฉันไม่แน่ใจว่ามันอาจเป็น MATLAB เช่นกัน ดังนั้นฉันจึงหวังที่จะเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ก่อนที่จะยื่นรายงานข้อผิดพลาด
Cris Luengo

2
ฉันจะบอกว่าอย่าใช้ macOS Majove
m7913d

1
@ m7913d * Mojave
SS Anne

2
@CrisLuengo: แม้ว่าจะเป็นระบบปฏิบัติการที่อาจทำให้เกิดปัญหานั่นคือสิ่งที่ Mathworks ต้องทำการตรวจสอบ พวกเขามี MacOS ฉันสงสัยว่าแอปเปิ้ลมี MATLAB ฉันจะ Mathworks ในสถานการณ์เช่นนี้
แดเนียล

คำตอบ:


0

นั่นอาจเป็นการเปลี่ยนแปลงของ libstdc ++ นี่เป็นห้องสมุดรันไทม์ที่ Apple เลิกใช้มาซักพักนึงแล้ว (XCode 8 ฉันคิดว่า) และในที่สุดก็ตกไปอย่างสมบูรณ์ในXCode 10และ Mojave ดังนั้นไฟล์ MEX ที่คุณรวบรวมอาจเป็นเวอร์ชั่นเก่ากว่า

กฎ MathWorks เกี่ยวกับความเข้ากันได้ของไฟล์ MEXคือพวกเขามักจะทำงานระหว่างรุ่นต่าง ๆ แต่หากมีการเปลี่ยนแปลงที่เข้ากันไม่ได้ (เช่นนี้) คุณต้องทำการคอมไพล์ใหม่


อย่างที่คุณสามารถบอกได้จากข้อความคำถามปัญหาเกิดขึ้นกับไฟล์ MEX ที่คอมไพล์ใน MATLAB รุ่นเดียวกันและระบบปฏิบัติการรุ่นเดียวกัน ฉันแสดงให้เห็นถึงปัญหาจริง ๆ ด้วยไฟล์ MEX ง่าย ๆ ที่ฉันรวบรวมรันและเรียบเรียงใหม่โดยไม่ต้องออกจาก MATLAB
Cris Luengo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.