MATLAB अब MacOS Mojave में अपग्रेड करने के बाद MEX- फ़ाइलों को लोड नहीं कर रहा है


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 get_data_pointer.c
get_data_pointer(0)

इसे साफ़ करने के लिए,

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

inmemवास्तव में एक खाली सेल सरणी देता है जो यह दर्शाता है कि कोई एमईएक्स-फाइलें मेमोरी में लोड नहीं की गई हैं, लेकिन version -modules( इस उत्तर से, अनिर्दिष्ट) ) अभी भी /Users/cris/matlab/get_data_pointer.mexmaci64अपने आउटपुट में दिखाता है। और MEX- फ़ाइल स्रोत कोड को बदलना और फिर से संकलित करना दर्शाता है कि, वास्तव में, MEX-file को कभी भी पुनः लोड नहीं किया जाता है, पुराने संस्करण को अभी भी चलाया जा रहा है जब तक कि कोई MATLAB से बाहर नहीं निकल जाता है।

मैं इसे macOS Mojave पर MATLAB R2017a पर देख रहा हूं। यह उच्च सिएरा के तहत एक ही MATLAB संस्करण के साथ कोई समस्या नहीं थी।

मैं MATLAB को पुनः आरंभ किए बिना MEX- फ़ाइल को कैसे लोड करने के लिए मजबूर कर सकता हूं?


क्या आपने बग रिपोर्ट भरी है?
कामीकोलो

@Kamiccolo: नहीं, मैंने नहीं किया है। मुझे लगता है कि यह ओएस के साथ एक मुद्दा है, लेकिन मुझे यकीन नहीं है, यह MATLAB भी हो सकता है। इसलिए मैं बग रिपोर्ट दाखिल करने से पहले इसके बारे में और जानने की उम्मीद कर रहा था।
संकट लुएंगो

2
मैं कहूंगा, macOS Majove का उपयोग न करें।
m7913d

1
@ m7913d * मोजावे
एसएस ऐनी

2
@ क्रिसलूंगो: यहां तक ​​कि अगर यह ओएस है जो समस्या का कारण हो सकता है, तो यह है कि कुछ मैथवर्क्स की जांच करनी होगी। उनके पास मैकओएस है, मुझे संदेह है कि सेब में MATLAB उपलब्ध है। मैं ऐसी स्थिति में मैथवर्क्स करूंगा।
डैनियल

जवाबों:


0

शायद यह libstdc ++ परिवर्तन है। यह एक रनटाइम लाइब्रेरी है जिसे Apple ने थोड़ी देर पहले (XCode 8 I think) में अपदस्थ किया और आखिरकार XCode 10 और Mojave में पूरी तरह से गिरा दिया । तो आपके द्वारा MEX फाइल को शायद पुराने संस्करण के साथ संकलित किया गया है।

MEX फ़ाइल संगतता पर मैथवर्क्स नियम यह है कि वे अक्सर संस्करणों के बीच काम करेंगे, लेकिन अगर कोई असंगत परिवर्तन (जैसे यह) है, तो आपको फिर से तैयार करने की आवश्यकता है।


जैसा कि आप प्रश्न पाठ से कह सकते हैं, समस्या MATLAB के संस्करण और OS के उसी संस्करण पर संकलित MEX- फाइलों के साथ होती है। मैं वास्तव में एक साधारण एमईएक्स-फाइल के साथ समस्या को प्रदर्शित करता हूं जिसे मैंने संकलित किया, चलाया, और फिर MATLAB से बाहर निकाले बिना फिर से संकलित किया।
संकट लुएंगो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.