2012-01-11 7 views
0

У меня есть 2 набора кода:Как скомпилировать MATLAB код, который будет использоваться с QT C++

  • код MATLAB и
  • код
  • QT C++.

Я попытался скомпилировать код MATLAB в библиотеку C++, используя команду mcc с компилятором msvc2008. Для моего кода QT C++ я использую mingw для компиляции. Однако, когда я пытаюсь добавить в MATLAB преобразованный код C++, похоже, проблем много.

Можно ли комбинировать эти два типа кода вместе? У кого-нибудь есть опыт использования комбинации этих языков?

! попытались использовать Octave, но я бы предпочел не перекодировать код MATLAB. Я пытаюсь найти альтернативу для запуска кода MATLAB напрямую.

NB: Мне нужно использовать mingw в QT, как это требуется, и для команды matlab mcc, у меня есть выбор для использования компилятора msvc. Было бы лучше, если бы я мог сделать программу автономной для переносимости. Причина, по которой мне нужно использовать код MATLAB, заключается в том, что мне нужны некоторые полезные функции манипуляции матрицей, а также потому, что мне было бы легче проводить исследования с использованием MATLAB.

+0

http://www.mathworks.com/products/matlab-coder/index.html?s_cid=global_nav – nullpotent

ответ

4

При компиляции кода Matlab с использованием mcc (по умолчанию или при использовании -m option) вы получаете исполняемый файл. Поэтому из вашего файла на C++ вы можете вызвать исполняемый файл matlab с помощью команды C/C++ exec.

Если вы используете -l option (используя mcc), вы получаете общую библиотеку и заголовок. Например, если вы вводите (в MATLAB):

mcc -l test.m -W cpplib:test.h 

Это должно произвести общую библиотеку test.lib или test.so и заголовок test.h

В test.h вы должны иметь линию аналогично:

bool MW_CALL_CONV mlxTest (int nlhs, mxArray * plhs [], int nrhs, mxArray * prhs []);

Вы можете вызвать функцию matlab, используя это.

Кроме того, вам необходимо добавить как общие библиотеки, так и заголовки в проект msvc.

+0

На самом деле проблема в том, что если я должен был использовать команду mcc для компиляции на C, я бы необходимо создать проект msvc, поскольку для компилятора msvc требуется некоторая функциональность. Я действительно ищу ответ, который можно было бы использовать с компилятором mingw с моим QT. – user1142930

+0

Это все еще возможно сделать с помощью mingw и QT, нет проблем. – Oli

+0

Я встречаюсь с ошибкой компиляции в QT mingw. [код] пример: программные файлы \ MATLAB \ R2010b \ extern \ include \ mclmcr.h: 314: ошибка: «mxInt64» не был объявлен [/ code] Кажется, что некоторая проблема, связанная с mingw или extern от matlab, построена только для msvc. – user1142930

1

Я исправил mxInt64 и mxUint64, добавив больше typedefs, чтобы код распознал их как подписанные и целые без знака 64 байта.

Смежные вопросы