MATLAB® Compiler™ поддерживает полный язык MATLAB и почти все тулбоксы на основе MATLAB кроме:
Большинство предварительно созданных графических интерфейсов пользователя включено в MATLAB и его сопутствующие тулбоксы.
Функциональность, которая не может быть названа непосредственно из командной строки.
Скомпилированные приложения могут запуститься только на операционных системах, которые запускают MATLAB. Однако компоненты, сгенерированные MATLAB Compiler , не могут использоваться в MATLAB. Кроме того, поскольку MATLAB Runtime является приблизительно тем же размером как MATLAB, для приложений, созданных с MATLAB Compiler , нужны определенная память устройства хранения данных и RAM, чтобы действовать. Для большей части актуальной информации о системных требованиях перейдите к веб-сайту MathWorks.
Скомпилированные приложения могут запуститься только на той же платформе, на которой они были разработаны за следующими исключениями:
Веб-приложения, которые могут быть развернуты на MATLAB Web App Server™, работающем на любой совместимой платформе.
Библиотеки C++ скомпилировали использование MATLAB Data API, которые не содержат специфичные для платформы файлы.
Блоки.NET скомпилировали с помощью Ядра.NET, которые не содержат специфичные для платформы файлы.
Пакеты Java®, которые не содержат специфичные для платформы файлы.
Пакеты Python®, которые не содержат специфичные для платформы файлы.
Видеть полный список
ограничений 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
операторы прагмы. Это заменяет анализ зависимостей продукта и дает ему команду явным образом включать функции, перечисленные в %#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
прагма, можно задать имя недостающего файла MATLAB на
командной строке MATLAB Compiler с помощью -a
опция.
Искать функции в вашем приложении, которое должно быть перечислено в %#function
прагма, ищите свой исходный код файла MATLAB текст, заданный как символьные массивы коллбэка или в качестве аргументов к feval
fminbnd
fminsearch
funm
, и fzero
функции или любые решатели ОДУ.
Чтобы найти текст используемым в качестве символьного массива коллбэка, ищите символы “Коллбэк” или “fcn” в вашем файле MATLAB. Этот поиск находит весь Callback
свойства заданы графическими объектами, такими как uicontrol
и uimenu
. Кроме того, это находит свойства фигур и осей тем концом в Fcn
, такой как CloseRequestFcn
, это также поддерживает коллбэки.
Несколько предупреждений могут появиться, когда вы запускаете автономное приложение в системе UNIX®.
Подавить libjvm.so
при предупреждении, устанавливает динамический путь к библиотеке правильно для платформы. Смотрите Установленный Путь MATLAB Runtime для Развертывания Во время выполнения.
Можно также использовать параметр компилятора -R -nojvm
установить nojvm
вашего приложения опция во время выполнения, если приложение способно к выполнению без 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™, требует некоторых стандартных программ инициализации, которые не развертываемы. Поэтому эти сети не могут быть развернуты без того, чтобы сначала быть обновленным.
Например, развертывание с Версией 5.0.1 (2006b) Deep Learning Toolbox и Версией 4.5 (R2006b) MATLAB Compiler дает к следующим ошибкам во время выполнения:
??? 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
опция с помощью a compiler.build
функция или -a
флаг с помощью mcc
.
Вы не можете использовать SetData
C++ метод, чтобы динамически изменить размер
mwArray
s.
Например, если вы работаете со следующим массивом:
[1 2 3 4]
вы не можете использовать SetData
увеличить размер массива к длине пяти элементов.
Допустимые и недопустимые типы файлов для упаковки приложений развертывания использования следующие:
Целевое приложение | Типы правильного файла | Недопустимые типы файлов |
---|---|---|
Автономное приложение | Файлы MEX MATLAB, скрипты MATLAB, функции MATLAB и файлы класса MATLAB. Эти файлы должны иметь однократную точку. | Защищенные файлы функции ( |
Library Compiler | Файлы MEX MATLAB, функции MATLAB и файлы класса MATLAB. Эти файлы должны иметь однократную точку. | Скрипты MATLAB, защищенные файлы функции ( |
MATLAB Production Server | Файлы MEX MATLAB и функции MATLAB. Эти файлы должны иметь однократную точку. | Скрипты MATLAB, файлы класса MATLAB, защитили файлы функции ( |