MATLAB® Compiler™ поддерживает полный язык MATLAB и почти все тулбоксы на основе MATLAB кроме:
Большинство предварительно созданных графических интерфейсов пользователя включено в MATLAB и его сопутствующие тулбоксы.
Функциональность, которая не может быть названа непосредственно из командной строки.
Symbolic Math Toolbox™
Кросс-платформенная совместимость приложений. Например, вы не можете запустить приложение, скомпилированное в 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.
Существует несколько способов устранить эту ошибку:
Используя
pragma
%#function
и коллбэки определения как символьные массивы
Определение коллбэков с указателями на функцию
Используя опцию -a
Определение Коллбэков как Символьные массивы. Создайте список всех функций, которые заданы только в символьных массивах коллбэка и передают эти функции с помощью отдельных операторов прагмы %#function
. Это заменяет анализ зависимостей продукта и дает ему команду явным образом включать функции, перечисленные в прагмы %#function
.
Например, вызов функции change_colormap
в примере приложения my_test
иллюстрирует эту проблему. Чтобы убедиться
MATLAB Compiler
обрабатывает файл 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 с помощью опции -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
В скомпилированном режиме только один аргумент может присутствовать в вызове функции 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
.
Вы не можете использовать функцию SETDATA
C++, чтобы динамически изменить размер mwArray
s.
Например, если вы работаете со следующим массивом:
[1 2 3 4]
вы не можете использовать SETDATA
, чтобы увеличить размер массива к длине пяти элементов.