jan 09 2014

Problemas e Soluções: Usando o Microsoft Visual Studio 2013 no Matlab R2013b para compilar arquivos .mex

Encontrei este problema ao tentar configurar o Matlab R2013b para usar o Microsoft Visual Studio Ultimate 2013 como compilador de C/C++. O Visual Studio 2013 não está na lista de compiladores suportados pelo Matlab R2013b no Windows de 64 bits.

Ao tentar utilizar o comando ‘mex -setup’ e tentar localizar um compilador automaticamente aparecia o seguinte erro:

>> mex -setup

Welcome to mex -setup. This utility will help you set up
a default compiler. For a list of supported compilers, see
http://www.mathworks.com/support/compilers/R2013b/win64.html

Please choose your compiler for building MEX-files:

Would you like mex to locate installed compilers [y]/n? y

No supported SDK or compiler was found on this computer.
For a list of supported compilers, see
http://www.mathworks.com/support/compilers/R2013b/win64.html

Unable to complete successfully.

Tentei instalar o Microsoft Windows SDK 7.1 (Microsoft Windows SDK for Windows 7 and .NET Framework 4), mas também não deu certo. O compilador continuava não sendo encontrado, mesmo tentando selecionar manualmente o caminho.

A solução que encontrei foi um arquivo no File Exchange do Matlab chamado Matlab mex support for Visual Studio 2013 (and mbuild). Basta baixar o arquivo VS2013.zip, e descompactar 5 arquivos que estão dentre dele (alguns com extensão .bat e outros com extensão .stp) nas pastas indicadas pelo arquivo README.TXT.

A solução foi criada pelo autor para o Matlab R2013a, mas funcionou perfeitamente também no MATLAB R2013b, bastando tomar o cuidado de substituir a string “R2013a” por “R2013b” nos caminhos indicados.

Feita a descompactação dos arquivos nas pastas indicadas, executei novamente o “mex -setup” e dessa vez deu certo, como pode ser visto abaixo:

>> mex -setup

Welcome to mex -setup. This utility will help you set up
a default compiler. For a list of supported compilers, see
http://www.mathworks.com/support/compilers/R2013b/win64.html

Please choose your compiler for building MEX-files:

Would you like mex to locate installed compilers [y]/n? y

Select a compiler:
[1] Microsoft Visual C++ 2013 in C:\Program Files (x86)\Microsoft Visual Studio 12.0
[2] Microsoft Visual C++ 2013 in C:\Program Files (x86)\Microsoft Visual Studio 12.0\

[0] None

Compiler: 2

Please verify your choices:

Compiler: Microsoft Visual C++ 2013
Location: C:\Program Files (x86)\Microsoft Visual Studio 12.0\

Are these correct [y]/n?

***************************************************************************
Warning: MEX-files generated using Microsoft Visual C++ 2013 require
that Microsoft Visual Studio 2013 run-time libraries be
available on the computer they are run on.
If you plan to redistribute your MEX-files to other MATLAB
users, be sure that they have the run-time libraries.
***************************************************************************

Trying to update options file: C:\Users\(removido)\AppData\Roaming\MathWorks\MATLAB\R2013b\mexopts.bat
From template: C:\PROGRA~1\MATLAB\R2013b\bin\win64\mexopts\msvc120opts.bat

Done . . .

**************************************************************************
Warning: The MATLAB C and Fortran API has changed to support MATLAB
variables with more than 2^32-1 elements. In the near future
you will be required to update your code to utilize the new
API. You can find more information about this at:
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html
Building with the -largeArrayDims option enables the new API.
**************************************************************************

Note que, bisonhamente, aparecem duas opções, uma delas com o caminho terminando com uma barra invertida e outra sem a barra. Certifique-se de escolher a opção com a barra, que no meu caso é a segunda, do contrário aparecem erros na hora de compilar.

Escolhendo a primeira opção, erro na compilação (rimou! :)):

>> mex yprime.c
LINK : fatal error LNK1561: entry point must be defined

C:\PROGRA~1\MATLAB\R2013B\BIN\MEX.PL: Error: Link of ‘yprime.exe’ failed.

Escolhendo a segunda opção, funciona perfeitamente:

>> mex yprime.c
>> T=1; Y=1:4;
yprime(T,Y)

ans =

2.0000 8.9685 4.0000 -1.0947

Compilador funcionando. Para deixar meus códigos mais rápidos agora só me falta aprender a escrever os arquivos .mex 🙂

Link permanente para este artigo: https://www.skooterblog.com/2014/01/09/problemas-e-solucoes-usando-o-microsoft-visual-studio-2013-no-matlab-r2013b-para-compilar-arquivos-mex/

Deixe um comentário

2 Comentários em "Problemas e Soluções: Usando o Microsoft Visual Studio 2013 no Matlab R2013b para compilar arquivos .mex"

Notificar sobre
avatar
Ordenar por:   mais novos | mais velhos | mais votados