Ограничения

Упаковочный MATLAB и тулбоксы

MATLAB® Compiler™ поддерживает полный язык MATLAB и почти все тулбоксы на основе MATLAB кроме:

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

  • Функциональность, которая не может быть названа непосредственно из командной строки.

  • Кросс-платформенная совместимость приложений. Например, вы не можете запустить приложение, скомпилированное в Windows® на Linux®.

Скомпилированные приложения могут запуститься только на операционных системах, которые запускают MATLAB. Однако компоненты, сгенерированные MATLAB Compiler , не могут использоваться в MATLAB. Кроме того, поскольку MATLAB Runtime является приблизительно тем же размером как MATLAB, для приложений, созданных с MATLAB Compiler , нужны определенная память устройства хранения данных и RAM, чтобы действовать. Для большей части актуальной информации о системных требованиях перейдите к веб-сайту MathWorks.

Видеть полный список ограничений 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 опция.

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

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

Чтобы найти текст используемым в качестве символьного массива коллбэка, ищите символы “Коллбэк” или “fcn” в вашем файле MATLAB. Этот поиск находит весь Callback свойства заданы графическими объектами, такими как uicontrol и uimenu. Кроме того, это находит свойства фигур и осей тем концом в Fcn, такой как CloseRequestFcn, это также поддерживает коллбэки.

Отключение предупреждения в системе UNIX

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

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

Можно также использовать параметр компилятора -R -nojvm установить nojvm вашего приложения опция во время выполнения, если приложение способно к выполнению без 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™, требует некоторых стандартных программ инициализации, которые не развертываемы. Поэтому эти сети не могут быть развернуты без того, чтобы сначала быть обновленным.

Например, развертывание с Версией 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

Ограничения на вызов 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 или -a флаг с помощью mcc.

Ограничения на Использование C++ SetData, чтобы Динамически Изменить размер mwArray

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

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

[1 2 3 4]

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

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

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

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

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

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

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

Library Compiler

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

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

MATLAB Production Server

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

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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте