Как вызвать функции Matlab из С++
Я хочу вызвать функцию MATLAB в моем проекте на С++.
Я использую Matlab R2010a и Visual Studio 2010
Сначала я создал простую функцию matlab:
function y = foo(x)
y = x+1;
а затем я использовал компилятор matlab для компиляции этой функции с использованием компилятора GUI matlab (File- > new → Deployment Project, а затем выберите С++ shared Library). Он создает эти файлы 2 папки: distrib и src.
содержит:
src содержит:
- foo.cpp
- foo.dll
- foo.exp
- foo.exports
- foo.h
- foo.lib
- foo_mcc_component_data.c
Я хочу использовать этот файл в приложении на С++. Я много раз пробовал, и я не нашел пути. Все способы, которые я нашел через Интернет, используют старый компилятор matlab, который создает разные файлы или работает на старой версии визуальной студии.
Так что, пожалуйста, кто-нибудь может мне помочь?
Что мне делать? Какие файлы/ссылки следует добавить и где? Какие пути я должен определить?
Ответы
Ответ 1
Возможно, это слишком поздно, но на будущее.
Включить foo.h
.
Добавить C/С++ - General-Additional Include Directories - путь к заголовкам matlab (C:\Program Files (x86)\MATLAB\R2009b\extern\include
).
Добавьте foo.lib
, mclmcrrt.lib
и mclcommain.lib
для Linker в дополнительных зависимостях.
Для компоновщика в дополнительных библиотечных каталогах указывается путь к вашим библиотекам matlab (C:\Program Files (x86)\MATLAB\R2009b\extern\lib\win32\microsoft
для 32-битного ver (версии Matlab и VS должны быть одинаковыми. Мне пришлось установить вторую версию 32-битного Matlab.)).
Я добавил путь к foo.lib
в своем системном пути.
Прежде чем использовать вашу библиотеку foo.dll
, вы должны инициализировать функцию MCR и библиотеки.
mclInitializeApplication(NULL,0);
fooInitialize();
После использования не забывайте:
mclTerminateApplication();
fooTerminate();
И некоторый демонстрационный код выглядит следующим образом:
int num = 1;
double numbrIn = 1.5;
std::cout<<"now we have " << numbrIn << std::endl;
mwArray array_in(num, 1, mxDOUBLE_CLASS, mxREAL);
array_in.SetData(&numbrIn,num);
mwArray array_out;
foo(1, array_out, array_in);
array_out.GetData(&numbrIn, num);
std::cout<<"now we have " << numbrIn << std::endl;
Ответ 2
Для компиляции приложения потребуются файлы foo.h
и foo.lib
. Файл foo.dll
должен быть отправлен вместе с полученным приложением, обычно в том же каталоге.
Если вы поместите файл foo.h
в тот же каталог, что и исходные файлы, вам не нужно делать что-либо особенное для #include "foo.h"
. Вы также можете добавить прямой путь к foo.lib
во внешних зависимостях компоновщика.
Если вы хотите хранить эти файлы вне папки вашего проекта и/или повторно использовать эти файлы в других приложениях, вы можете прочитать VС++ Directories, Проекты и решения.
Изменить. Вероятно, вам также необходимо добавить библиотеки MATLAB к вашим путям include и library. Проверьте решение поддержки MathWorks Почему я получаю сообщение об ошибке "Не удалось найти файл include" mclmcrrt.h" при попытке скомпилировать автономное приложение?