macOS Mojave로 업그레이드 한 후 MATLAB이 더 이상 MEX 파일을 언로드하지 않습니다.


10

MATLAB에서 clear mex모든 MEX 파일을 메모리에서 언로드합니다 (잠기지 않은 경우). 이전 버전의 macOS에서는 간단히 clear mex명령을 실행하여 MTL 파일을 다시 컴파일하고 MATLAB을 다시 시작하지 않고 수정 된 버전을 실행할 수있었습니다 . 더 이상 모하비에서는 불가능합니다.

예를 들어 다음과 같은 간단한 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을 종료 할 때까지 이전 버전이 계속 실행되고 있음을 알 수 있습니다.

macOS Mojave의 MATLAB R2017a에서 이것을보고 있습니다. High Sierra에서 동일한 MATLAB 버전에서는 문제가되지 않았습니다.

MATLAB이 다시 시작하지 않고 MEX 파일을 언로드하도록하려면 어떻게해야합니까?


버그 보고서를 작성하셨습니까?
Kamiccolo

@Kamiccolo : 아뇨. OS에 문제가 있다는 인상을 받았지만 확실하지 않습니다. MATLAB 일 수도 있습니다. 그래서 나는 버그 보고서를 제출하기 전에 그것에 대해 더 많이 배우기를 바랐습니다.
Cris Luengo

2
macOS Majove를 사용하지 마십시오.
m7913d 2018

1
@ m7913d * Mojave
SS Anne

2
@CrisLuengo : 문제를 일으킬 수있는 OS 인 경우에도 Mathworks에서 조사해야합니다. 그들은 MacOS를 가지고 있습니다. 애플이 MATLAB을 사용할 수 있는지 의심합니다. 나는 그런 상황에서 Mathworks를 할 것입니다.
Daniel

답변:


0

아마도 libstdc ++ 변경 일 것입니다. 이것은 Apple이 꽤 오래 전에 사용하지 않는 런타임 라이브러리이며 (XCode 8은 생각합니다) 마침내 XCode 10 및 Mojave에 완전히 떨어졌습니다 . 따라서 MEX 파일은 이전 버전으로 컴파일되었을 수 있습니다.

MEX 파일 호환성에 대한 MathWorks 규칙 은 종종 버전간에 작동하지만, 호환되지 않는 변경 (예 : 이와 같은 변경)이 있으면 다시 컴파일해야한다는 것입니다.


질문 텍스트에서 알 수 있듯이 동일한 버전의 MATLAB 및 동일한 버전의 OS에서 컴파일 된 MEX 파일에서 문제가 발생합니다. MATLAB을 종료하지 않고 컴파일, 실행 및 재 컴파일 한 간단한 MEX 파일로 문제를 실제로 보여줍니다.
Cris Luengo 2011
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.