Main Content

Dependency Analysis Using MATLAB Compiler

MATLAB® Compiler™ uses a dependency analysis function to determine the list of necessary files to include in the generated package. Sometimes, this process generates a large list of files, particularly when MATLAB object classes exist in the compilation and the dependency analyzer cannot resolve overloaded methods at package time. Dependency analysis also processes include/exclude files on each pass.

Tip

To improve package time performance and lessen application size, prune the path with the mcc command’s -N and -p flags. You can also specify files to include using the mcc -a flag, the Files required for your application to run section in the compiler app, or use the AdditionalFiles option in a compiler.build function.

Function Dependency

The dependency analyzer searches for executable content such as:

  • MATLAB files

  • P-files

    Note

    If the MATLAB file corresponding to the p-file is not available, the dependency analysis cannot determine the p-file’s dependencies.

  • .fig files

  • MEX-files

Include MEX-Files, DLLs, or Shared Libraries

When you compile MATLAB functions containing MEX-files, ensure that the dependency analyzer can find them. In particular, note that:

  • Since the dependency analyzer cannot examine MEX-files, DLLs, or shared libraries to determine their dependencies, explicitly include all executable files these files require.

  • If you have any doubts that the dependency analyzer can find a MATLAB function called by a MEX-file, DLL, or shared library, then manually include that function.

  • Not all functions are compatible with the compiler. Check the file mccExcludedFiles.log after your build completes. This file lists all functions called from your application that you cannot deploy.

License and Toolbox Dependencies

Some functionality requires a specific MathWorks® product. You can use the function matlab.codetools.requiredFilesAndProducts to display a list of MATLAB files and MathWorks products that may be required to run the specified MATLAB program files.

For more details on determining required toolboxes, see the MATLAB answers post How do I determine the required toolboxes and licenses for my MATLAB code?.

Data File Dependency

In addition to executable content, MATLAB Compiler can detect and automatically include files that your MATLAB functions access by calling any of these functions: audioinfo, audioread, csvread, daqread, dlmread, fileread, fopen, imfinfo, importdata, imread, load, matfile, mmfileinfo, open, readtable, type, VideoReader, xlsfinfo, xlsread, xmlread, and xslt.

To ensure that a specific file is included in the compiled application, specify the file without a path. This means the file should be accessible from the current directory or any directory listed in the MATLAB path. For example:

fileread('myfile.ext')
If you specify a full path to the file, the compiler does not include the file in the compiled application. Dependency analysis only includes a file if there is no path element, relying on the MATLAB path to find the file.

The compiler app automatically adds these data files to the Files required for your application to run area.

Exclude Files From Package

To ignore data files during dependency analysis, use one or more of the following options. For examples on how to use these options together, see %#exclude.

  • Use the %#exclude pragma in your MATLAB code to ignore a file or function during dependency analysis.

  • Use the -X flag in your mcc command to ignore all data files detected during dependency analysis.

  • Use the AutoDetectDataFiles option in a compiler.build function to control whether data files are automatically included in the package. Setting this to false/'off'/0 is equivalent to using -X.

Troubleshoot Missing Dependencies

If the dependency analyzer is unable to find one or more dependencies, MATLAB Compiler populates the unresolvedSymbols.txt file with a list of the missing items. If this file is not empty, you must locate the required dependencies and ensure they are available by placing them in the search path. Then, repackage your project. If one or more missing dependencies are not deployable, you can still use the functionality in your code before it is deployed by using the isdeployed boolean.

See Also

| | |