2009-10-21 3 views
13

У меня есть код, который мне нужен для кода на C++ из-за большой зависимости от шаблонов. Я хочу вызвать этот код из MATLAB: в основном, мне нужно передать некоторые параметры в код C++, а код C++ возвращает матрицу в MATLAB. Я слышал, что это возможно с чем-то, называемым файлом MEX, который я все еще изучаю. Однако я не уверен, что поддерживается в этих файлах MEX. Поддерживается ли все C++ (например, STL и Boost)? Как это сложно?Вызов кода C++ из MATLAB?

EDIT: Мне не нужны общие библиотеки, а только заголовок, например shared_ptr.

+0

[Учебное видео (персидский)] (https://drive.google.com/drive/folders/0B56iSBYoI8YbN2ExMzA5NTMtN2Q1NS00MGMyLTk3ODctYjNiMzM1ZjgwMzg2) – Ghominejad

ответ

8

Посмотрите на MEX-files Guide, особенно раздел 25-27 для C++. Основные структуры данных должны работать, но проблема с использованием Threading с Boost.
cout не будет работать должным образом в C++, mexPrintf должен использоваться вместо этого.

+0

я обеспечу некоторую осторожность из опыта. Если вы используете Simulink и RTW, то при компиляции установлен флаг -DRT. Некоторые из математических расширений boost's используют шаблон . -DRT убивает эти классы. Если вы столкнулись с этой проблемой, попробуйте изменить -DRT на -DRT = RT в файле make. – KitsuneYMG

3

Конечно, можно писать файлы C++ MEX, которые используют STL и boost. В общем, вы должны быть в состоянии делать все, что угодно, в файле C++ MEX. Основным практическим ограничением является то, что MATLAB уже поставляется с кучей библиотек, поэтому, если вы используете одну из надстроек, для которой требуется общая библиотека (некоторые из них только для заголовка), вам нужно будет сопоставить версию, которую вы компилируете с этой доставкой с MATLAB.

Например, MATLAB R2009b поставляется с повышением 1,36 (вы можете сказать, глядя на имена библиотек в <matlabroot>/бен/< арка >).

1

Файлы на C++ фактически скомпилированы внешним компилятором. Используйте mex -setup, чтобы выбрать, какой из них (here - список поддерживаемых компиляторов). Поэтому вам не должно быть слишком много странных вещей, и вы не должны слишком ограничены тем, что вы можете сделать.

В прошлом году я сделал несколько материалов MEX, и моя память немного ржавая, но вам нужно построить массивы MATLAB, используя функции MEX. Я нашел документацию MATLAB адекватной, и весь опыт не слишком болезнен.

1

STL определенно поддерживается. Скорее всего, пока. Дело в том, что у вас есть STL и BOOST, развернутые на вашем компьютере, вам должно быть хорошо идти.

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