exponenta event banner

Ограничения

Упаковка MATLAB и панелей инструментов

Компилятор 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 вариант.

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

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

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

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

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

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

Также можно использовать параметр компилятора -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.

Отсутствует управление версиями среды выполнения MATLAB в Mac OS X

Возможность установки нескольких версий MATLAB Runtime на одном компьютере не поддерживается в Mac OS X. При получении новой версии MATLAB необходимо перекомпилировать и повторно развернуть все приложения и компоненты. Кроме того, при установке новой версии среды выполнения 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

Ограничения на вызов 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

  • Включите файл в раздел Файлы, необходимые для запуска приложения в приложении компилятора, AdditionalFiles опция с использованием compiler.build функции или -a флаг с использованием mcc.

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

Нельзя использовать C++ SetData метод для динамического изменения размеров mwArrays.

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

[1 2 3 4]

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

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

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

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

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

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

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

Компилятор библиотеки

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

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

Производственный сервер MATLAB

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

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

Связанные темы