Вопрос

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

Для вызова C C++ в Matlab также есть два метода.Первый — вызов функций в общих библиотеках C.Второй — собрать код 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 VS компиляция кода Matlab в общую библиотеку C C++.

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

Это было полезно?

Решение

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

Я предлагаю использовать файлы MEX, если

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

Используйте общую библиотеку, если

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

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

Другие советы

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

Компилятор Matlab C на самом деле не является чем-то особенным;можно использовать разные компиляторы.Видеть связь список поддерживаемых компиляторов.Сюда не входит gcc, но включена студия MS Visual.Вы столкнетесь с проблемами при связывании с предоставленными библиотеками.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top