2009-10-16 6 views
14

Кажется, что есть несколько способов вызова matlab в C C++ и вызов C C++ в matlab. Пока я пытаюсь перечислить их здесь, пожалуйста, укажите это. Если я что-то пропущу.matlab в C C++ и C C++ в matlab

Чтобы вызвать C C++ в matlab, существуют также два метода. Первый из них - вызов функций в совместно используемых библиотеках. Второй заключается в создании кода C C++ в двоичных MEX-файлах, которые будут вызываться из командной строки MATLAB. Для первого метода общие библиотеки C являются общими, то есть без изменения их кода на языке C для matlab и скомпилированы из общего компилятора C, такого как gcc?

Для вызова кода matlab в C C++ доступны два метода. Первый - это механизм Matlab. Второй заключается в использовании MATLAB Compiler mcc для создания разделяемых библиотек C или C++ из вашего кода MATLAB.

Кроме того, MATLAB и C C++ могут связываться посредством записи и чтения данных в некоторый файл (например, файл mat, текстовый файл) и из него.

Имея более чем один способ достижения каждой из целей здесь, не могли бы вы рассказать мне, какие случаи лучше всего использовать, кто из них? т.е. вызывающие функции в C-библиотеках VS, строят код C C++ в двоичные MEX-файлы, Matlab engine VS компилирует Matlab-код в общую библиотеку C C++.

Спасибо и приветствую!

+0

Нет языка C/C++. Взаимодействие между C и X будет намного проще, чем взаимодействие между C++ и X. –

+11

Вы знаете, что я имею в виду: «C и/или C++» – Tim

+1

Ответы C будут намного короче ответов на C++ (а в некоторых случаях , ответы на C++ будут «писать обертки в C»). С кем вас больше волнует? –

ответ

8

У меня есть только опыт работы с вызовами функций C или C++ из MATLAB. Мне кажется, что единственная разница между функциями вызова в общей библиотеке и функциями вызова из файла MEX заключается в том, что с помощью общей библиотеки вы должны вызывать эту функцию с помощью «calllib», которая является функцией типа командной строки, а функции MEX позволяют вы должны вызывать функции, как если бы они были встроенными функциями, поэтому интерфейс немного чище.

Мое предложение заключается в использовании MEX файлы, если

  • Вы используете C++ (возможно, придется написать оболочку для использования C++ в общей библиотеке)
  • Вы используете MATLAB в качестве клея для большое количество оптимизированных подпрограмм C или C++. Вы хотите, чтобы их можно было назвать чисто.

Использование разделяемой библиотеки, если

  • Вы уже существующую библиотеку C, которые могут быть использованы без изменений.
  • Вам нужно всего лишь небольшое количество вызовов функций C.

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

3

Я думаю, что методы вы назвали правильно (это было время, так как я использовал их)

C-MATLAB компилятор не действительно особенный; можно использовать разные компиляторы. См. Список поддерживаемых компиляторов link. Это не включает gcc, но MS Visual studio включен. При связывании с поставляемыми библиотеками вы столкнетесь с проблемами.

В принципе: вызов matlab из C - это то, что вы сделали бы, если вам нужен жесткий интерфейс; например, если вы хотите синхронизировать 2 инструмента, или ваша S-функция (simulink) требует дополнительной информации. Но тогда такой файл можно, по-видимому, назвать Matlab/simulink.

Вызов c из matlab - это то, что вы хотите сделать, если вы напишете свои собственные S-функции или расширения для Matlab.

Выбор между C и C++ является вашим; если вы начинаете с чистого листа, я предлагаю вам использовать C++; вам не нужно использовать полную функциональность, но это позволяет больше свободы. В настоящее время также доступно больше библиотек для C++.

C - это язык выбора, если вам нужно перенестись в самые разные среды; например, для компиляции C в DSP. Или, если у вас есть код устаревшего кода на C, чтобы начать с. Смешивание C и C++ возможно, но может быть немного громоздким; Я уверен, что вы найдете темы в StackOverflow только по этому вопросу.

2

Обучающие видеоматериалы об использовании C++ в среде Matlab и Matlab в C++ (персидский язык)

Содержание:

1 - Введение

  • Introduction.wmv [2:00, 1,2 Мб, 800х600]

2 - C++ в Matlab

  • Basic concepts.wmv [9:04, 5,9 Мб, 800x600]
  • конфигурации и простой проект [8:25, 13 MB, 800x600]
  • Образцы [2:17, 2,7 Мб, 800x600]
  • отладки [2:38, 3,4 Мб, 800x600]

3 - Matlab в C++

  • Matlab C++ Shared DLL.wmv [5:42, 6,8 Мб, 800х600]
  • Использование Matlab из VC++ [10:52, 14,2 МБ, 800х600]

Watch or Download from Google

Download from 4Shared