Ограничения

Упаковка MATLAB и тулбоксов

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 опция.

Поиск отсутствующих функций в файле MATLAB

Чтобы найти функции в вашем приложении, которые должны быть перечислены в %#function pragma, поиск исходного кода файла MATLAB по тексту, заданному как символьные массивы коллбэка или как аргументы в feval, fminbnd, fminsearch, funm, и fzero функций или любых решателей ОДУ.

Чтобы найти текст, используемый в качестве символьного массива коллбэка, выполните поиск символов «Callback» или «fcn» в файле MATLAB. Этот поиск находит все Callback свойства, заданные графическими объектами, такими как uicontrol и uimenu. В сложении он находит свойства рисунков и осей, которые заканчиваются Fcn, таких как CloseRequestFcn, которые также поддерживают коллбэки.

Подавление предупреждений в системе UNIX

При запуске автономного приложения в UNIX может появиться несколько предупреждений® система.

Чтобы подавить libjvm.so предупреждение, правильно установите динамический путь к библиотеке для вашей платформы. Смотрите раздел Set MATLAB Путь для развертывания во время выполнения.

Можно также использовать опцию компилятора -R -nojvm чтобы задать nojvm вашего приложения опция run-time, если приложение способно работать без Java.

Невозможно использовать графику с опцией -nojvm

Если ваша программа использует графику и вы компилируетесь со -nojvm опция, вы получите ошибку времени выполнения.

Не удается создать файл Выхода

Если вы получите эту ошибку, существует несколько возможных причин.

Can't create the output file filename

Возможные причины включают:

  • Отсутствие разрешения на запись для папки, в которой MATLAB Compiler пытается записать файл (скорее всего, текущую рабочую папку).

  • Отсутствие свободного дискового пространства в папке, в которой MATLAB Compiler пытается записать файл (скорее всего, текущую рабочую папку).

  • Если вы создаете автономное приложение и тестировали его, не исключено, что процесс запускается и блокирует MATLAB Compiler от перезаписи его новой версией.

Нет справки по файлам MATLAB для пакетных функций

Если вы создаете файл MATLAB с самодокументирующейся онлайн-справкой и упакуете его, результаты следующей команды неразборчивы:

help filename

Примечание

По причинам эффективности комментарии к файлам MATLAB удаляются перед шифрованием MATLAB Runtime.

Нет версии MATLAB Runtime на Mac OS X

Функция, позволяющая установить несколько версий MATLAB Runtime на одной машине, не поддерживается в Mac OS X. Когда вы получаете новую версию MATLAB, необходимо перекомпилировать и перекомпилировать все ваши приложения и компоненты. Кроме того, при установке новой версии MATLAB Runtime на целевой машине необходимо удалить старую версию MATLAB Runtime перед установкой новой. На целевой машине может быть только одна версия MATLAB Runtime.

Старые нейронные сети не развертываются с MATLAB Compiler

Загрузка сетей, сохраненных из старых версий 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

Ограничения на вызов PRINTDLG с несколькими аргументами в пакетном режиме

В скомпилированном режиме в вызове 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.

Ограничения на использование C++ SetData для динамического изменения размера mwArray

Вы не можете использовать SetData C++ метод динамического изменения размера mwArrayс.

Например, если вы работаете со следующим массивом:

[1 2 3 4]

вы не можете использовать SetData для увеличения размера массива до длины пяти элементов.

Принятые типы файлов для упаковки

Допустимые и недопустимые типы файлов для упаковки с помощью приложений развертывания:

Целевое приложениеДопустимые типы файловНедопустимые типы файлов

Автономное приложение

MATLAB- Файлов MEX, скрипты MATLAB, функции MATLAB и файлы классов MATLAB. Эти файлы должны иметь одну точку входа.

Защищенные файлы функции (.p файлы), функции Java, компоненты COM или .NET и файлы данных.

Library Compiler

MATLAB- Файлов MEX, функции MATLAB и файлы классов MATLAB. Эти файлы должны иметь одну точку входа.

Скрипты MATLAB, защищенные файлы функции (.p файлы), функции Java, компоненты COM или .NET и файлы данных.

MATLAB Production Server

Функции MATLAB Файлов MEX и MATLAB. Эти файлы должны иметь одну точку входа.

Скрипты MATLAB, файлы классов MATLAB, защищенные файлы функции (.p файлы), функции Java, компоненты COM или .NET и файлы данных. Файлы классов MATLAB могут быть зависимыми файлами.

Похожие темы