Ответ 1
Это зависит от того, какую версию MATLAB вы используете. R2010b поддерживает VS2010 из коробки. Если у вас R2010a, есть доступный патч:
У меня установлен Visual Studio 2010. Однако MATLAB не находит компилятор.
>> mex -setup
Please choose your compiler for building external interface (MEX) files:
Would you like mex to locate installed compilers [y]/n? y
Select a compiler:
[0] None
Compiler:
Если я отвечу на вопрос n
, я получаю следующее
Would you like mex to locate installed compilers [y]/n? n
Select a compiler:
[1] Intel C++ 11.1 (with Microsoft Visual C++ 2008 SP1 linker)
[2] Intel C++ 9.1 (with Microsoft Visual C++ 2005 SP1 linker)
[3] Intel Visual Fortran 11.1 (with Microsoft Visual C++ 2008 SP1 linker)
[4] Intel Visual Fortran 11.1 (with Microsoft Visual C++ 2008 Shell linker)
[5] Intel Visual Fortran 10.1 (with Microsoft Visual C++ 2005 SP1 linker)
[6] Microsoft Visual C++ 2005 SP1
[7] Microsoft Visual C++ 2008 Express
[8] Microsoft Visual C++ 2008 SP1
[0] None
Compiler: 8
The default location for Microsoft Visual C++ 2008 SP1 compilers is C:\Program Files (x86)\Microsoft Visual Studio 9.0,
but that directory does not exist on this machine.
Use C:\Program Files (x86)\Microsoft Visual Studio 9.0 anyway [y]/n? n
Please enter the location of your compiler: [C:\Program Files (x86)\Microsoft Visual Studio 9.0]
Каков самый простой способ скомпилировать мой код на С++, чтобы сделать его доступным в MATLAB? Установить Visual С++ 2008? оо
Это зависит от того, какую версию MATLAB вы используете. R2010b поддерживает VS2010 из коробки. Если у вас R2010a, есть доступный патч:
Существует несколько способов обойти вашу проблему, и только одна включает деньги:)
mbuild -setup
.Для справок в будущем: http://www.mathworks.com/support/compilers/R2010b/index.html
Вы также можете сделать свой код на С++ доступным для Matlab без использования mex. Matlab способен загружать внешние DLL и вызывать их функции. Таким образом, вы можете обернуть свой код в DLL и полностью обойти mex.
Как правило, я нашел, что это более простой способ вызова кода C или С++ из Matlab. Недостатком является то, что у вас не будет всех возможностей для манипулирования структурами данных Matlab, которые предоставляет mex. Вы все равно можете передавать данные взад и вперед, некоторые вещи более громоздки, такие как выделение массива на C и предоставление права собственности на него в matlab.