MATLAB® Compiler™ supports the full MATLAB language and almost all toolboxes based on MATLAB except:
Most of the prebuilt graphical user interfaces included in MATLAB and its companion toolboxes.
Functionality that cannot be called directly from the command line.
Cross-platform compatibility of applications. For example, you cannot run an application compiled in Windows® on Linux®.
Compiled applications can run only on operating systems that run MATLAB. However, components generated by the MATLAB Compiler cannot be used in MATLAB. Also, since the MATLAB Runtime is approximately the same size as MATLAB, applications built with MATLAB Compiler need specific storage memory and RAM to operate. For the most up-to-date information about system requirements, go to the MathWorks website.
To see the full list of
MATLAB
Compiler
limitations, visit: https://www.mathworks.com/products/compiler/compiler_support.html
.
Note
For a list of functions not supported by the MATLAB Compiler See Functions Not Supported for Compilation by MATLAB Compiler and MATLAB Compiler SDK.
When MATLAB Compiler creates a standalone application, it packages the MATLAB files that you specify on the command line. In addition, it includes any other MATLAB files that your packaged MATLAB files call. MATLAB Compiler uses a dependency analysis, which determines all the functions on which the supplied MATLAB files, MEX-files, and P-files depend.
Note
If the MATLAB file associated with a p-file is unavailable, the dependency analysis cannot discover the p-file dependencies.
The dependency analysis cannot locate a function if the only place the function is called in your MATLAB file is a call to the function in either of the following:
Callback string
Character array passed as an argument to the feval
function or an ODE
solver
Tip
Dependent functions can also be hidden from the dependency analyzer in
.mat
files that are loaded by compiled applications. Use the mcc
-a
argument or the %#function
pragma to identify
.mat
file classes or functions that are supported by the
load
command.
MATLAB Compiler does not look in these text character arrays for the names of functions to package.
Your application runs, but an interactive user interface element, such as a push button, does not work. The compiled application issues this error message:
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.
There are several ways to eliminate this error:
Using the %#function
pragma
and specifying callbacks as character arrays
Specifying callbacks with function handles
Using the -a
option
Specifying Callbacks as Character Arrays. Create a list of all the functions that are specified only in callback character arrays
and pass these functions using separate %#function
pragma statements. This
overrides the product dependency analysis and instructs it to explicitly include the functions
listed in the %#function
pragmas.
For example, the call to the change_colormap
function in the sample
application my_test
illustrates this problem. To make sure
MATLAB
Compiler
processes the change_colormap
MATLAB file, list the function name in the %#function
pragma.
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');
Specifying Callbacks with Function Handles. To specify the callbacks with function handles, use the same code as in the example above, and replace the last line with:
'CallBack',@change_colormap);
For more information on specifying the value of a callback, see the MATLAB Programming Fundamentals documentation.
Using the -a Option. Instead of using the %#function
pragma, you can specify the name of
the missing MATLAB file on the
MATLAB
Compiler
command line using the -a
option.
To find functions in your application that need to be listed in a
%#function
pragma, search your MATLAB file source code for text specified as callback character arrays or as arguments
to the feval
, fminbnd
, fminsearch
,
funm
, and fzero
functions or any ODE solvers.
To find text used as callback character array, search for the characters
“Callback” or “fcn” in your MATLAB file. This search finds all the Callback
properties defined by
graphics objects, such as uicontrol
and uimenu
. In
addition, it finds the properties of figures and axes that end in Fcn
, such
as CloseRequestFcn
, that also support callbacks.
Several warnings might appear when you run a standalone application on the UNIX® system.
To suppress the libjvm.so
warning, set the dynamic library path properly
for your platform. See MATLAB Runtime Path Settings for Run-Time Deployment.
You can also use the compiler option -R -nojvm
to set your application's
nojvm
run-time option, if the application is capable of running without
Java®.
If your program uses graphics and you compile with the -nojvm
option,
you get a run-time error.
If you receive this error, there are several possible causes to consider.
Can't create the output file filename
Possible causes include:
Lack of write permission for the folder where MATLAB Compiler is attempting to write the file (most likely the current working folder).
Lack of free disk space in the folder where MATLAB Compiler is attempting to write the file (most likely the current working folder).
If you are creating a standalone application and have been testing it, it is possible that a process is running and is blocking MATLAB Compiler from overwriting it with a new version.
If you create a MATLAB file with self-documenting online help and package it, the results of following command are unintelligible:
help filename
Note
For performance reasons, MATLAB file comments are stripped out before MATLAB Runtime encryption.
The feature that allows you to install multiple versions of the MATLAB Runtime on the same machine is not supported on Mac OS X. When you receive a new version of MATLAB, you must recompile and redeploy all your applications and components. Also, when you install a new MATLAB Runtime on a target machine, you must delete the old version of the MATLAB Runtime and install the new one. You can have only one version of the MATLAB Runtime on the target machine.
Loading networks saved from older Deep Learning Toolbox™ versions requires some initialization routines that are not deployable. Therefore, these networks cannot be deployed without first being updated.
For example, deploying with Deep Learning Toolbox Version 5.0.1 (2006b) and MATLAB Compiler Version 4.5 (R2006b) yields the following errors at run time:
??? 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
In compiled mode, only one argument can be present in a call to the MATLAB
printdlg
function (for example, printdlg(gcf)
).
You cannot receive an error when making at call to printdlg
with
multiple arguments. However, when an application containing the multiple-argument call is
packaged, the action fails with the following error message:
Error using = => printdlg at 11 PRINTDLG requires exactly one argument
which
Does Not Search Current Working FolderUsing which
, as in this example, does not cause the current working
folder to be searched in deployed applications. In addition, it may cause unpredictable behavior
of the open
function.
function pathtest which myFile.mat open('myFile.mat')
Use one of the following solutions as an alternative:
Use the pwd
function to explicitly point to the file in the current
folder, as follows:
open([pwd '/myFile.mat'])
Rather than using the general open
function, use
load
or other specialized functions for your particular file type, as
load
explicitly checks for the file in the current folder. For example:
load myFile.mat
Include your file in the Files required for your application to run
area of the Compiler app or the -a
flag using
mcc
.
You cannot use the C++ SetData
method to dynamically resize
mwArray
s.
For instance, if you are working with the following array:
[1 2 3 4]
you cannot use SetData
to increase the size of the array to a length of
five elements.
The valid and invalid file types for packaging using deployment apps are as follows:
Target Application | Valid File Types | Invalid File Types |
---|---|---|
Standalone Application | MATLAB MEX files, MATLAB scripts, and MATLAB functions. These files must have a single entry point. | MATLAB class files, protected function
files ( |
Library Compiler | MATLAB MEX files and MATLAB functions. These files must have a single entry point. | MATLAB scripts, MATLAB class files, protected function files
( |
MATLAB Production Server | MATLAB MEX files and MATLAB functions. These files must have a single entry point. | MATLAB scripts, MATLAB class files, protected function files
( |