使用 MATLAB Compiler 进行依赖关系分析
MATLAB® Compiler™ 使用依赖关系分析函数来确定生成的包中包含的必要文件的列表。有时,此过程会生成一个庞大的文件列表,尤其是在编译中存在 MATLAB 对象类且依赖关系分析过程无法在包时解析重载方法时。MATLAB Compiler 依赖关系分析在每次通过时还会处理 include
/exclude
文件。
提示
为了提高包时间性能并减小应用程序大小,请使用 mcc
命令的
和 -N
-p
标志修剪路径。您还可以使用 mcc -a
标志、编译器 App 中的自定义需求部分或 compiler.build
函数中的 AdditionalFiles
选项来指定要包含的文件。
函数依赖关系
依赖关系分析过程会搜索可执行内容,例如:
MATLAB 文件
P 文件
注意
如果 p 文件对应的 MATLAB 文件不可用,则依赖关系分析无法确定 p 文件的依赖关系。
.fig
文件MEX 文件
MATLAB Compiler 无法发现通过 feval
、eval
、Handle Graphics® 回调或从 MAT 文件加载的对象调用的函数。要明确包含这些函数,请使用 %#function
程序指令。例如:
function foo %#function bar feval('bar'); end %function foo
行 %#function bar
通知 MATLAB Compiler,函数 bar
将被包含在编译中,并通过 feval
调用。
有关在可部署工件中包含文件的详细信息,请参阅在打包的应用程序中包含和访问文件。
包含 MEX 文件、DLL 或共享库
当您编译包含 MEX 文件的 MATLAB 函数时,请确保依赖关系分析过程可以找到它们。特别是,请注意:
由于依赖关系分析函数无法检查 MEX 文件、DLL 或共享库以确定它们的依赖关系,因此,应明确包含这些文件所需的所有可执行文件。
如果您怀疑在依赖关系分析期间能否找到由 MEX 文件、DLL 或共享库调用的某个 MATLAB 函数,请手动包含该函数。
并非所有函数都与编译器兼容。当编译完成后,请检查文件
mccExcludedFiles.log
。该文件列出了从您无法部署的应用程序调用的所有函数。
许可证和工具箱依赖项
有关确定所需工具箱的详细信息,请参阅 MATLAB 答案帖子如何确定我的 MATLAB 代码所需的工具箱和许可证?。
数据文件依赖关系
除了可执行内容之外,MATLAB Compiler 还可以通过调用以下任意函数来检测并自动包含 MATLAB 函数访问的文件:audioinfo
、audioread
、csvread
、daqread
、dlmread
、fileread
、fopen
、imfinfo
、importdata
、imread
、load
、matfile
、mmfileinfo
、open
、readtable
、type
、VideoReader
、xlsfinfo
、xlsread
、xmlread
和 xslt
。
编译器 App 会自动将检测到的数据文件添加到可部署存档中。
为了确保特定文件被包含在内,并且可以在编译后的应用程序中访问,请在不指定路径的情况下指定文件。这意味着该文件应该可以从当前目录或 MATLAB 路径中列出的任何目录访问。例如:
fileread('myfile.ext')
从包中排除文件
要在依赖关系分析期间忽略数据文件,请使用下列一个或多个选项。有关如何一起使用这些选项的示例,请参阅 %#exclude
。
在 MATLAB 代码中使用
%#exclude
指令在依赖关系分析期间忽略文件或函数。在
-X
命令中使用mcc
标志来忽略依赖关系分析期间检测到的所有数据文件。使用
AutoDetectDataFiles
函数中的compiler.build
选项来控制数据文件是否自动包含在包中。将其设置为false
/'off'
/0
等效于使用-X
。
解决缺少依赖项的问题
如果一个或多个依赖项无法找到,MATLAB Compiler 会将缺失项的列表填充到 unresolvedSymbols.txt
文件中。如果此文件不为空,则必须定位所需的依赖项并将它们放在搜索路径中以确保它们可用。然后,重新打包您的工程。如果存在无法部署的依赖项,您仍可在代码部署前通过使用 isdeployed
布尔值来使用相关功能。
某些功能需要特定的 MathWorks® 产品。您可以使用函数 matlab.codetools.requiredFilesAndProducts
显示运行指定 MATLAB 程序文件可能需要的 MathWorks 文件和 MATLAB 产品的列表。
有关 MATLAB Compiler 的限制和故障排除帮助,请参阅限制。
另请参阅
compiler.build.standaloneApplication
| 独立应用程序编译器 | mcc
| isdeployed