Компилятор MATLAB ® SDK™ поддерживает полный язык MATLAB и почти все панели инструментов на основе MATLAB, за исключением:
Большинство готовых графических пользовательских интерфейсов, включенных в MATLAB и сопутствующие панели инструментов.
Функциональность, которую невозможно вызвать непосредственно из командной строки.
Скомпилированные приложения могут работать только в операционных системах с MATLAB. Однако компоненты, созданные SDK компилятора MATLAB, не могут использоваться в MATLAB. Кроме того, так как MATLAB Runtime примерно того же размера, что и MATLAB, приложения, построенные с помощью MATLAB Compiler SDK, нуждаются в специальной памяти и оперативной памяти для работы. Самую последнюю информацию о требованиях к системе можно найти на веб-сайте MathWorks.
Скомпилированные приложения могут работать только на той же платформе, на которой они были разработаны, за следующими исключениями:
Веб-приложения, которые можно развернуть в MATLAB Web App Server™ запущенные на любой совместимой платформе.
Библиотеки C++, скомпилированные с помощью MATLAB Data API, которые не содержат специфичных для платформы файлов.
Сборки .NET скомпилированы с использованием .NET Core, которые не содержат файлов, специфичных для платформы.
Пакеты Java ®, не содержащие специфичных для платформы файлов.
Пакеты Python ®, не содержащие специфичных для платформы файлов.
Для просмотра полного списка
ограничений SDK компилятора MATLAB
посетите: https://www.mathworks.com/products/compiler/compiler_support.html.
Примечание
Список функций, не поддерживаемых SDK компилятора MATLAB см. в разделе Функции , не поддерживаемые компилятором MATLAB и SDK компилятора MATLAB.
Когда MATLAB Compiler SDK создает автономное приложение, он упаковывает файлы MATLAB, указанные в командной строке. Кроме того, он включает любые другие файлы MATLAB, которые вызывают упакованные файлы MATLAB. MATLAB Compiler SDK использует анализ зависимостей, который определяет все функции, от которых зависят поставляемые файлы MATLAB, MEX-файлы и P-файлы.
Примечание
Если файл MATLAB, связанный с p-файлом, недоступен, анализ зависимостей не может обнаружить зависимости p-файла.
Анализ зависимостей не может найти функцию, если единственное место вызова функции в файле MATLAB - это вызов функции в одном из следующих вариантов:
Строка обратного вызова
Массив символов передан в качестве аргумента feval функция или решатель ОДУ
Совет
Зависимые функции также могут быть скрыты от анализатора зависимостей в .mat файлы, загружаемые скомпилированными приложениями. Используйте mcc -a аргумент или %#function прагматика для идентификации .mat классов файлов или функций, которые поддерживаются load команда.
MATLAB Compiler SDK не ищет в этих текстовых массивах символов имена функций для упаковки.
Приложение запускается, но интерактивный элемент пользовательского интерфейса, например кнопка, не работает. Скомпилированное приложение выдает следующее сообщение об ошибке:
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 Заявления прагматики. Это переопределяет анализ зависимостей изделия и предписывает ему явно включать функции, перечисленные в %#function прагматики.
Например, вызов change_colormap функция в примере приложения my_test иллюстрирует эту проблему. Чтобы убедиться, что
MATLAB Compiler SDK обрабатывает
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 SDK с помощью -a вариант.
Поиск функций в приложении, которые должны быть перечислены в %#function pragma, поиск исходного кода файла MATLAB по тексту, указанному как массивы символов обратного вызова или как аргументы для feval, fminbnd, fminsearch, funm, и fzero функции или любые решатели ОДУ.
Чтобы найти текст, используемый в качестве массива символов обратного вызова, выполните поиск символов «Обратный вызов» или «fcn» в файле MATLAB. Этот поиск находит все Callback свойства, определенные графическими объектами, такие как uicontrol и uimenu. Кроме того, он находит свойства фигур и осей, которые заканчиваются на Fcn, такие как CloseRequestFcn, которые также поддерживают обратные вызовы.
При запуске автономного приложения в системе UNIX ® может появиться несколько предупреждений.
Подавление libjvm.so предупреждение, правильно задайте путь к динамической библиотеке для вашей платформы. См. раздел Установка пути времени выполнения MATLAB для развертывания во время выполнения.
Также можно использовать параметр компилятора -R -nojvm для настройки приложения nojvm параметр времени выполнения, если приложение может работать без Java.
Если ваша программа использует графику и вы компилируете с -nojvm , вы получаете ошибку времени выполнения.
Если вы получили эту ошибку, существует несколько возможных причин.
Can't create the output file filename
Возможные причины:
Отсутствует разрешение на запись для папки, в которую MATLAB Compiler SDK пытается записать файл (скорее всего, текущую рабочую папку).
Недостаточно свободного места на диске в папке, где MATLAB Compiler SDK пытается записать файл (скорее всего, текущую рабочую папку).
Если вы создаете автономное приложение и тестируете его, возможно, что процесс выполняется и блокирует MATLAB Compiler SDK от перезаписи его новой версией.
Если вы создаете файл MATLAB с самодокументированной интерактивной справкой и упаковываете его в пакет, то результаты следующей команды будут невразумительными:
help filename
Примечание
Из соображений производительности комментарии к файлам MATLAB удаляются перед шифрованием во время выполнения MATLAB.
Возможность установки нескольких версий MATLAB Runtime на одном компьютере не поддерживается в Mac OS X. При получении новой версии MATLAB необходимо перекомпилировать и повторно развернуть все приложения и компоненты. Кроме того, при установке новой версии среды выполнения MATLAB на целевой компьютер необходимо удалить старую версию среды выполнения MATLAB перед установкой новой. На конечном компьютере можно использовать только одну версию среды выполнения MATLAB.
Для загрузки сетей, сохраненных из старых версий 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
Включите файл в раздел Файлы, необходимые для запуска приложения в приложении компилятора, AdditionalFiles опция с использованием compiler.build функции или -a флаг с использованием mcc.
Нельзя использовать C++ SetData метод для динамического изменения размеров mwArrays.
Например, при работе со следующим массивом:
[1 2 3 4]
вы не можете использовать SetData для увеличения размера массива до длины в пять элементов.
Допустимые и недопустимые типы файлов для упаковки с помощью приложений развертывания:
| Целевое приложение | Допустимые типы файлов | Недопустимые типы файлов |
|---|---|---|
Автономное приложение | файлы MATLAB MEX, сценарии MATLAB, функции MATLAB и файлы классов MATLAB. Эти файлы должны иметь одну точку входа. | Файлы защищенных функций ( |
Компилятор библиотеки | файлы MATLAB MEX, функции MATLAB и файлы классов MATLAB. Эти файлы должны иметь одну точку входа. | сценарии MATLAB, файлы защищенных функций ( |
Производственный сервер MATLAB | Файлы MATLAB MEX и функции MATLAB. Эти файлы должны иметь одну точку входа. | сценарии MATLAB, файлы классов MATLAB, файлы защищенных функций ( |