Генерация Динамически подключаемых библиотек C/C++ из КОДА MATLAB

Динамические библиотеки, сгенерированные MATLAB CODER

По умолчанию, когда MATLAB® Coder™ генерирует динамическую библиотеку (DLL):

  • DLL подходит для платформы, что вы продолжаете работать.

  • DLL использует версию выпуска библиотеки времени выполнения C.

  • Связь DLL соответствует выходному языку, по умолчанию, C. Если вы устанавливаете выходной язык на C++, связь соответствует C++.

  • Когда выходной язык является C, сгенерированные заголовочные файлы явным образом объявляют, что экспортируемые функции extern "C", чтобы упростить интегрирование DLL в приложения C++.

  • Когда исполняемый файл, который использует выполнения DLL, DLL, должен быть на системном пути так, чтобы исполняемый файл мог получить доступ к нему.

Если вы генерируете DLL, который использует динамически выделенные данные переменного размера, MATLAB CODER обеспечивает экспортируемые служебные функции, чтобы взаимодействовать с этим данные в сгенерированном коде. Для получения дополнительной информации смотрите Служебные функции для Создания emxArray Структуры данных.

Сгенерируйте динамически подключаемую библиотеку C Используя приложение MATLAB CODER

Этот пример показывает, как сгенерировать DLL C из кода MATLAB с помощью приложения MATLAB CODER.

Создайте функции точки входа

Запишите две функции MATLAB, ep1 и ep2. ep1 берет входной параметр того, единственный скаляр. ep2 берет два входных параметра, которые удваивают скаляры. В локальной перезаписываемой папке:

  1. Создайте файл MATLAB, ep1.m, который содержит:

    function y = ep1(u) %#codegen
    y = u;

  2. Создайте файл MATLAB, ep2.m, который содержит:

    function y = ep2(u, v) %#codegen
    y = u + v;

Создайте тестовый файл

В папке, которая содержит ep1.m и ep2.m, создайте файл MATLAB, ep_test.m, который вызывает ep1 и ep2 с входными параметрами в качестве примера.

function [y, y1] = ep_test
y = ep1(single(2));
y1 = ep2(double(3), double(4));

Откройте приложение MATLAB CODER

На вкладке MATLAB Toolstrip Apps, под Генерацией кода, кликают по значку приложения MATLAB CODER.

Приложение открывает страницу Select Source Files.

Задайте исходные файлы

  1. На странице Select Source Files введите или выберите имя функции точки входа ep1.

    Приложение создает проект с именем по умолчанию ep1.prj в текущей папке.

  2. Чтобы добавить ep2 к списку функций точки входа, нажмите Add Entry-Point Function. Введите или выберите имя функции точки входа ep2.

  3. Нажмите Далее, чтобы перейти к Задавать Входному шагу Типов. Приложение анализирует функции для кодирования готовность генерации кода и проблемы. Если приложение идентифицирует проблемы, оно открывает страницу Review Code Generation Readiness, где можно рассмотреть и устранить проблемы. В этом примере, потому что приложение не обнаруживает проблемы, оно открывает страницу Define Input Types.

Задайте входные типы

Поскольку C использует статический контроль типов, во время компиляции, MATLAB CODER должен определить свойства всех переменных в файлах MATLAB. Необходимо задать свойства всех входных параметров функции точки входа. Из свойств входных параметров функции точки входа MATLAB CODER может вывести свойства всех переменных в файлах MATLAB.

Задайте тестовый файл, который MATLAB CODER может использовать, чтобы автоматически задать типы:

  1. Введите или выберите тестовый файл ep_test.m m.

  2. Нажмите Autodefine Input Types.

    Тестовый файл, eps_test.m, вызывает функции точки входа ep1 и ep2 с входными типами в качестве примера. MATLAB CODER выводит, что для ep1, входной параметр u является single(1x1). Для ep2 u и v является double(1x1).

  3. Нажмите Далее, чтобы перейти к Проверке на шаг Проблем Во время выполнения.

Проверьте на проблемы во время выполнения

Проверка на шаг Проблем Во время выполнения генерирует файл MEX от ваших функций точки входа, запускает MEX-функцию и сообщает о проблемах. Этот шаг является дополнительным. Однако это - лучшая практика выполнить этот шаг. Можно обнаружить и зафиксировать ошибки времени выполнения, которые более трудно диагностировать в сгенерированном коде C.

  1. Чтобы открыть диалоговое окно Check for Run-Time Issues, кликните по Проверке на стрелку Проблем.

    Приложение заполняет поле тестового файла с ep_test, тестовый файл, что вы раньше задавали входные типы.

  2. Нажмите Check for Issues.

    Приложение генерирует MEX-функцию под названием ep1_mex для ep1 и ep2. Это запускает тестовый файл ep_test, заменяющий вызовы ep1 и ep2 с вызовами MEX-функции. Если приложение обнаруживает проблемы во время генерации MEX-функции или выполнения, это предоставляет предупреждающие сообщения и сообщения об ошибке. Кликните по этим сообщениям, чтобы перейти к проблематичному коду и устранить проблему. В этом примере приложение не обнаруживает проблемы.

  3. Нажмите Далее, чтобы перейти к Сгенерировать шагу Кода.

Сгенерируйте код С

  1. Чтобы открыть диалоговое окно Generate, нажмите стрелку Generate.

  2. В диалоговом окне Generate, типе Сборки набора к Dynamic Library и Языке к C. Используйте значения по умолчанию для других настроек конфигурации сборки проекта.

  3. Нажмите Generate.

    Приложение указывает на ту генерацию кода, за которой следуют. Это отображает исходные файлы MATLAB и сгенерированные выходные файлы на левой стороне страницы. На вкладке Variables это отображает информацию об исходных переменных MATLAB. На вкладке Target Build Log это отображает журнал сборки, включая предупреждения компилятора и ошибки. По умолчанию, в окне кода, отображения приложения файл исходного кода C, ep1.c c. Чтобы просмотреть различный файл, в панели Файлов исходного кода или Выходных файлов, кликают по имени файла.

    В системах Microsoft® Windows® MATLAB CODER генерирует динамическую библиотеку C, ep1.dll и вспомогательные файлы, в папке по умолчанию, codegen\dll\ep1. Это генерирует минимальный набор операторов #include для заголовочных файлов, требуемых выбранной заменяющей библиотекой кода. На Linux® это генерирует общий объект (.so) файл. На Mac это генерирует динамическую библиотеку (.dylib) файл. Связь DLL соответствует выходному языку, в этом примере, C. Если вы устанавливаете выходной язык на C++, связь соответствует C++. MATLAB CODER генерирует автономную статическую библиотеку mcadd C в папке codegen\lib\mcadd.

  4. Чтобы просмотреть отчет генерации кода, нажмите View Report.

  5. Нажмите Далее, чтобы открыть страницу Finish Workflow.

Рассмотрите страницу рабочего процесса конца

Страница Finish Workflow указывает на ту генерацию кода, за которой следуют. Это предоставляет сводные данные проекта и ссылки на сгенерированный вывод.

Сгенерируйте динамическую библиотеку C в командной строке

Этот пример показывает, как сгенерировать динамическую библиотеку C из кода MATLAB в командной строке с помощью функции codegen.

  1. Запишите две функции MATLAB, ep1 берет входной параметр того, единственный скаляр, и ep2 берет два входных параметра, оба двойных скаляра. В локальной перезаписываемой папке создайте файл MATLAB, ep1.m, который содержит:

    function y = ep1(u) %#codegen
    y = u;
    В той же локальной перезаписываемой папке создайте файл MATLAB, ep2.m, который содержит:
    function y = ep2(u, v) %#codegen
    y = u + v;

  2. Сгенерируйте динамическую библиотеку C.

    codegen -config:dll ep1 -args single(0) ep2 -args {0,0}  

    В системах Microsoft Windows codegen генерирует динамическую библиотеку C, ep1.dll и вспомогательные файлы, в папке по умолчанию, codegen/dll/ep1. Это генерирует минимальный набор операторов #include для заголовочных файлов, требуемых выбранной заменяющей библиотекой кода. На Linux это генерирует общий объект (.so) файл. На Mac это генерирует динамическую библиотеку (.dylib) файл. Связь DLL соответствует выходному языку, в этом примере, C. Если вы устанавливаете выходной язык на C++, связь соответствует C++.

    Примечание

    Выходной язык по умолчанию является C. Чтобы изменить выходной язык на C++, смотрите, Задают Язык для Генерации кода.

Была ли эта тема полезной?