主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

使用 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 无法发现通过 fevaleval、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 函数访问的文件:audioinfoaudioreadcsvreaddaqreaddlmreadfilereadfopenimfinfoimportdataimreadloadmatfilemmfileinfoopenreadtabletypeVideoReaderxlsfinfoxlsreadxmlreadxslt

编译器 App 会自动将检测到的数据文件添加到可部署存档中。

为了确保特定文件被包含在内,并且可以在编译后的应用程序中访问,请在不指定路径的情况下指定文件。这意味着该文件应该可以从当前目录或 MATLAB 路径中列出的任何目录访问。例如:

fileread('myfile.ext')
依赖关系分析依赖于 MATLAB 路径来查找文件。如果您在 MATLAB 代码中指定了文件的完整路径,依赖关系分析过程可能无法找到该文件。

从包中排除文件

要在依赖关系分析期间忽略数据文件,请使用下列一个或多个选项。有关如何一起使用这些选项的示例,请参阅 %#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 的限制和故障排除帮助,请参阅限制

另请参阅

| | |

主题