Ограничения

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

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

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

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

  • Symbolic Math Toolbox™

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

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

Видеть полный список ограничений MATLAB Compiler SDK, посещения: https://www.mathworks.com/products/compiler/compiler_support.html.

Примечание

Для списка функций, не поддерживаемых MATLAB Compiler SDK , Смотрите Функции, не поддерживаемые MATLAB Compiler / MATLAB Compiler SDK.

Решение проблем коллбэка: Пропавшие без вести функций

Когда 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. 

Работа вокруг

Существует несколько способов устранить эту ошибку:

  • Используя pragma %#function и коллбэки определения как символьные массивы

  • Определение коллбэков с указателями на функцию

  • Используя опцию -a

Определение Коллбэков как Символьные массивы.  Создайте список всех функций, которые заданы только в символьных массивах коллбэка и передают эти функции с помощью отдельных операторов прагмы %#function. Это заменяет анализ зависимостей продукта и дает ему команду явным образом включать функции, перечисленные в прагмы %#function.

Например, вызов функции change_colormap в примере приложения my_test иллюстрирует эту проблему. Чтобы убедиться MATLAB Compiler SDK обрабатывает файл MATLAB change_colormap, перечислите имя функции в прагме %#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 SDK с помощью опции -a.

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

Чтобы искать функции в вашем приложении, которое должно быть перечислено в прагме %#function, ищите свой исходный код файла MATLAB текст, заданный как символьные массивы коллбэка или в качестве аргументов к feval, fminbnd, fminsearch, funm, и функциям 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 SDK пытается записать файл (скорее всего, текущая рабочая папка).

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

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

Никакая справка файла 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 с несколькими аргументами в группированном режиме

В скомпилированном режиме только один аргумент может присутствовать в вызове функции printdlg MATLAB (например, 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++, чтобы динамически изменить размер mwArray s.

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

[1 2 3 4]

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

Похожие темы