MATLAB® Compiler™ поддерживает полный язык MATLAB и почти все тулбоксы, основанные на MATLAB, кроме:
Большинство предварительно построенных графических пользовательских интерфейсов, входящих в состав MATLAB и близких ему тулбоксов.
Функциональность, которая не может быть вызвана непосредственно из командной строки.
Скомпилированные приложения могут запускаться только в операционных системах, которые запускают MATLAB. Однако компоненты, сгенерированные MATLAB Compiler, не могут использоваться в MATLAB. Кроме того, поскольку MATLAB Runtime примерно такого же размера, как и MATLAB, для работы приложений, созданных с помощью MATLAB Compiler, необходимы определенная память для хранения данных и оперативная память. Самую актуальную информацию о системных требованиях можно найти на сайте MathWorks.
Скомпилированные приложения могут запускаться только на той же платформе, на которой они разрабатывались, за следующими исключениями:
Web- приложения, который можно развернуть в MATLAB Web App Server™ работающем на любой совместимой платформе.
Библиотеки C++, скомпилированные с помощью MATLAB Data API, которые не содержат специфичных для платформы файлов.
Сборки .NET, скомпилированные с помощью .NET Core, не содержащие файлов для конкретной платформы.
Java® пакеты, не содержащие специфичные для платформы файлы.
Питон® пакеты, не содержащие специфичные для платформы файлы.
Чтобы увидеть полный список
ограничений MATLAB Compiler
, посетите: https://www.mathworks.com/products/compiler/compiler_support.html
.
Примечание
Список функций, не поддерживаемых MATLAB Compiler Смотрите Функции , не поддерживаемые для компиляции MATLAB Compiler и MATLAB Compiler SDK.
Когда MATLAB Compiler создает автономное приложение, оно упаковывает файлы MATLAB, которые вы задаете в командной строке. В сложение он включает любые другие файлы MATLAB, которые вызов ваши пакетные файлы MATLAB. MATLAB Compiler использует анализ зависимостей, который определяет все функции, от которых зависят поставляемые файлы MATLAB, файлы MEX и P-файлы.
Примечание
Если файл MATLAB, сопоставленный с p-файлом, недоступен, анализ зависимостей не может обнаружить зависимости p-файла.
Анализ зависимостей не может найти функцию, если в файле MATLAB вызывается только одно из следующих вызовов функции:
Строка коллбэка
Символьный массив передан в качестве аргумента в feval
функция или решатель ОДУ
Совет
Зависимые функции также могут быть скрыты от анализатора зависимостей в .mat
файлы, которые загружаются скомпилированными приложениями. Используйте mcc -a
аргумент или %#function
прагма для идентификации .mat
классы файлов или функции, поддерживаемые load
команда.
MATLAB Compiler не ищет в этих текстовых символьных массивах имена функций, которые нужно упаковать.
Ваше приложение запускается, но интерактивный элемент пользовательского интерфейса, такой как кнопка, не работает. Скомпилированное приложение выдает это сообщение об ошибке:
An error occurred in the callback: change_colormap The error message caught was : Reference to unknown function change_colormap from FEVAL in stand-alone mode.
Существует несколько способов устранить эту ошибку:
Использование %#function
pragma
и определение коллбэков как символьные массивы
Задание коллбэков с помощью указателей на функцию
Использование -a
опция
Определение коллбэков как символьных массивов. Создайте список всех функций, которые заданы только в символьных массивах коллбэка, и передайте эти функции с помощью отдельных %#function
операторы pragma. Это переопределяет анализ зависимостей продукта и предписывает ему явно включать функции, перечисленные в %#function
прагмы.
Например, вызов change_colormap
функция в примере приложения my_test
иллюстрирует эту задачу. Чтобы убедиться, что
MATLAB Compiler обрабатывает
change_colormap ФАЙЛУ MATLAB перечислите имя функции в
%#function
прагма.
function my_test() % Graphics library callback test application %#function change_colormap peaks; p_btn = uicontrol(gcf,... 'Style', 'pushbutton',... 'Position',[10 10 133 25 ],... 'String', 'Make Black & White',... 'CallBack','change_colormap');
Задание коллбэков с указателями на функции. Чтобы задать коллбэки с указателями на функцию, используйте тот же код, что и в примере выше, и замените последнюю линию на:
'CallBack',@change_colormap);
Для получения дополнительной информации об указании значения обратного вызова смотрите документацию Основы Программирования MATLAB.
Использование Опции -a. Вместо использования %#function
pragma, можно задать имя отсутствующего файла MATLAB в
командной
строке MATLAB Compiler с помощью -a опция.
Чтобы найти функции в вашем приложении, которые должны быть перечислены в %#function
pragma, поиск исходного кода файла MATLAB по тексту, заданному как символьные массивы коллбэка или как аргументы в feval
, fminbnd
, fminsearch
, funm
, и fzero
функций или любых решателей ОДУ.
Чтобы найти текст, используемый в качестве символьного массива коллбэка, выполните поиск символов «Callback» или «fcn» в файле MATLAB. Этот поиск находит все Callback
свойства, заданные графическими объектами, такими как uicontrol
и uimenu
. В сложении он находит свойства рисунков и осей, которые заканчиваются Fcn
, таких как CloseRequestFcn
, которые также поддерживают коллбэки.
При запуске автономного приложения в UNIX может появиться несколько предупреждений® система.
Чтобы подавить libjvm.so
предупреждение, правильно установите динамический путь к библиотеке для вашей платформы. Смотрите раздел Set MATLAB Путь для развертывания во время выполнения.
Можно также использовать опцию компилятора -R -nojvm
чтобы задать nojvm
вашего приложения опция run-time, если приложение способно работать без Java.
Если ваша программа использует графику и вы компилируетесь со -nojvm
опция, вы получите ошибку времени выполнения.
Если вы получите эту ошибку, существует несколько возможных причин.
Can't create the output file filename
Возможные причины включают:
Отсутствие разрешения на запись для папки, в которой MATLAB Compiler пытается записать файл (скорее всего, текущую рабочую папку).
Отсутствие свободного дискового пространства в папке, в которой MATLAB Compiler пытается записать файл (скорее всего, текущую рабочую папку).
Если вы создаете автономное приложение и тестировали его, не исключено, что процесс запускается и блокирует MATLAB Compiler от перезаписи его новой версией.
Если вы создаете файл MATLAB с самодокументирующейся онлайн-справкой и упакуете его, результаты следующей команды неразборчивы:
help filename
Примечание
По причинам эффективности комментарии к файлам MATLAB удаляются перед шифрованием MATLAB Runtime.
Функция, позволяющая установить несколько версий MATLAB Runtime на одной машине, не поддерживается в Mac OS X. Когда вы получаете новую версию MATLAB, необходимо перекомпилировать и перекомпилировать все ваши приложения и компоненты. Кроме того, при установке новой версии MATLAB Runtime на целевой машине необходимо удалить старую версию MATLAB Runtime перед установкой новой. На целевой машине может быть только одна версия MATLAB Runtime.
Загрузка сетей, сохраненных из старых версий Deep Learning Toolbox™, требует некоторых стандартных программ инициализации, которые не могут быть развернуты. Поэтому эти сети не могут быть развернуты без предварительного обновления.
Например, развертывание с Deep Learning Toolbox версии 5.0.1 (2006b) и MATLAB Compiler версии 4.5 (R2006b) приводит к следующим ошибкам во время выполнения:
??? Error using ==> network.subsasgn "layers{1}.initFcn" cannot be set to non-existing function "initwb". Error in ==> updatenet at 40 Error in ==> network.loadobj at 10 ??? Undefined function or method 'sim' for input arguments of type 'struct'. Error in ==> mynetworkapp at 30
В скомпилированном режиме в вызове MATLAB может присутствовать только один аргумент printdlg
функция (для примера, printdlg(gcf)
).
Вы не можете получить ошибку при вызове printdlg
с несколькими аргументами. Однако, когда приложение, содержащее вызов с несколькими аргументами, упаковано, действие прекращает работать с следующим сообщением об ошибке:
Error using = => printdlg at 11 PRINTDLG requires exactly one argument
which
Не выполняет поиск текущей рабочей папкиИспользование which
как в этом примере, не приводит к поиску текущей рабочей папки в развернутых приложениях. В сложение это может вызвать непредсказуемое поведение open
функция.
function pathtest which myFile.mat open('myFile.mat')
В качестве альтернативы используйте одно из следующих решений:
Используйте pwd
функция для явного указания на файл в текущей папке следующим образом:
open([pwd '/myFile.mat'])
Вместо того, чтобы использовать общую open
функция, использование load
или другие специализированные функции для вашего конкретного типа файла, как load
явно проверяет файл в текущей папке. Для примера:
load myFile.mat
Включите свой файл в Files required for your application to run область приложения Compiler, AdditionalFiles
опция с использованием compiler.build
function, или -a
флаг с использованием mcc
.
Вы не можете использовать SetData
C++ метод динамического изменения размера
mwArray
с.
Например, если вы работаете со следующим массивом:
[1 2 3 4]
вы не можете использовать SetData
для увеличения размера массива до длины пяти элементов.
Допустимые и недопустимые типы файлов для упаковки с помощью приложений развертывания:
Целевое приложение | Допустимые типы файлов | Недопустимые типы файлов |
---|---|---|
Автономное приложение | MATLAB- Файлов MEX, скрипты MATLAB, функции MATLAB и файлы классов MATLAB. Эти файлы должны иметь одну точку входа. | Защищенные файлы функции ( |
Library Compiler | MATLAB- Файлов MEX, функции MATLAB и файлы классов MATLAB. Эти файлы должны иметь одну точку входа. | Скрипты MATLAB, защищенные файлы функции ( |
MATLAB Production Server | Функции MATLAB Файлов MEX и MATLAB. Эти файлы должны иметь одну точку входа. | Скрипты MATLAB, файлы классов MATLAB, защищенные файлы функции ( |