O MATLAB não descarrega mais os arquivos MEX após a atualização para o macOS Mojave


10

No MATLAB, clear mexdescarrega todos os arquivos MEX da memória (a menos que estejam bloqueados). Nas versões anteriores do macOS, eu era capaz de recompilar um arquivo MEX e executar a versão modificada sem reiniciar o MATLAB, simplesmente emitindo um clear mexcomando. Isso não é mais possível no Mojave.

Por exemplo, pegue este arquivo MEX trivial ( 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]);
}

Podemos criar o arquivo MEX e carregá-lo na memória com

mex get_data_pointer.c
get_data_pointer(0)

Para limpar,

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

inmemna verdade, retorna uma matriz de células vazia indicando que nenhum arquivo MEX está carregado na memória, mas version -modules(não documentado, a partir desta resposta ) ainda aparece /Users/cris/matlab/get_data_pointer.mexmaci64em sua saída. E alterar o código-fonte do arquivo MEX e recompilar demonstra que, de fato, o arquivo MEX nunca é recarregado, a versão antiga ainda está sendo executada até a saída do MATLAB.

Estou vendo isso no MATLAB R2017a no macOS Mojave. Isso nunca foi um problema com a mesma versão do MATLAB no High Sierra.

Como forçar o MATLAB a descarregar o arquivo MEX sem reiniciar?


Você preencheu um relatório de bug?
22619 Kamiccolo

@Kamiccolo: Não, não tenho. Tenho a impressão de que esse é um problema com o sistema operacional, mas não tenho certeza, pode ser o MATLAB também. Então, eu esperava aprender mais sobre isso antes de registrar um relatório de bug.
Cris Luengo

2
Eu diria, não use o macOS Majove.
M7913d

11
@ m7913d * Mojave
SS Anne

2
@CrisLuengo: Mesmo que seja o sistema operacional que possa causar o problema, isso é algo que o Mathworks precisa investigar. Eles têm MacOS, duvido que a Apple tenha o MATLAB disponível. Gostaria Mathworks em tal situação.
Daniel Daniel

Respostas:


0

Essa é provavelmente a alteração libstdc ++. Esta é uma biblioteca de tempo de execução que a Apple abandonou há algum tempo (XCode 8, eu acho) e finalmente caiu completamente no XCode 10 e no Mojave. Portanto, o arquivo MEX que você possui provavelmente foi compilado com uma versão mais antiga.

As regras do MathWorks sobre compatibilidade de arquivos MEX são que elas geralmente funcionam entre versões, mas se houver uma alteração incompatível (como esta), será necessário recompilar.


Como você pode ver no texto da pergunta, o problema ocorre com os arquivos MEX compilados na mesma versão do MATLAB e na mesma versão do sistema operacional. Na verdade, demonstro o problema com um simples arquivo MEX que eu compilei, executei e recompilei sem sair do MATLAB.
Cris Luengo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.