Настройка mex для использования компилятора Visual Studio 2010

У меня установлен 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? оо

Ответ 2

Существует несколько способов обойти вашу проблему, и только одна включает деньги:)

  • Купить/обновить до новой версии Matlab (R2010b распознает и работает с VS2010).
  • Вам не нужно устанавливать полный пакет VS2008, достаточно старого Windows SDK v7.0. После установки MATLAB должен распознать, когда вы выполняете mbuild -setup.
  • Как вы сами предложили, установите VS2008.

Для справок в будущем: http://www.mathworks.com/support/compilers/R2010b/index.html

Ответ 3

Вы также можете сделать свой код на С++ доступным для Matlab без использования mex. Matlab способен загружать внешние DLL и вызывать их функции. Таким образом, вы можете обернуть свой код в DLL и полностью обойти mex.

Как правило, я нашел, что это более простой способ вызова кода C или С++ из Matlab. Недостатком является то, что у вас не будет всех возможностей для манипулирования структурами данных Matlab, которые предоставляет mex. Вы все равно можете передавать данные взад и вперед, некоторые вещи более громоздки, такие как выделение массива на C и предоставление права собственности на него в matlab.