主要内容

写可部署MATLAB代码

打包应用程序需要功能

应用程序实现MATLAB®编译器SDK™MATLAB生产服务器™通过MATLAB函数生成的api访问MATLAB代码。在这些应用程序中使用的所有MATLAB代码必须作为MATLAB函数编写。

打包的应用程序不处理MATLAB运行时的文件

编译器保护您的代码不受未经授权的更改。可部署的MATLAB文件在编译时被暂停或冻结。这并不意味着您不能部署灵活的应用程序——这意味着在设计应用程序时必须考虑到灵活性.例如,如果您希望最终用户能够在两种不同的方法之间进行选择,那么两种方法都必须在可部署归档文件中可用。

MATLAB运行时只能在构建可部署归档时加密的MATLAB代码上工作。任何动态生成新的MATLAB代码的函数或进程都不能与之对抗MATLAB运行时

一些MATLAB工具箱,如深度学习工具箱™产品,可以动态生成MATLAB代码。因为MATLAB运行时只执行加密的MATLAB文件,深度学习工具箱生成未加密的MATLAB文件,深度学习工具箱中的一些函数无法部署。

类似地,无法部署需要检查MATLAB函数文件内容的函数。帮助,例如,是动态的,在部署模式下不可用。您可以使用LOADLIBRARY在部署模式下,如果你提供一个MATLAB函数原型。

而不是编译生成MATLAB代码的函数并尝试部署它,执行以下任务:

  1. 在MATLAB中运行一次代码以获得生成的函数。

  2. 包的MATLAB代码,包括生成的函数。

提示

另一种替代方法EVAL函数宏指令正在使用匿名函数句柄。

如果您需要为动态运行时处理创建MATLAB代码的能力,那么您的最终用户必须安装MATLAB的副本。

不依赖更改目录或路径来控制MATLAB文件

通常,良好的编程实践建议不要在代码中动态地重定向程序搜索路径。许多开发人员都倾向于这种行为,因为它模拟了他们通常在命令行上执行的操作。然而,这可能会在部署代码时导致问题。

例如,在一个已部署的应用程序中,MATLAB和Java®路径是固定的,不能改变。因此,任何更改这些路径的尝试(使用cd命令或目录命令)失败。

如果你发现你无法避免放置目录在MATLAB代码中调用,使用ismccisdeployed.看到使用isdeployed函数执行特定于部署的代码路径获取详细信息。

使用isdeployed函数执行特定于部署的代码路径

isdeployed函数允许您指定MATLAB代码的哪些部分是可部署的,哪些是不可部署的。这样的规范最小化了编译错误,并有助于创建更高效、可维护的代码。

例如,你发现使用它是不可避免的目录当你写startup.m.使用ismccisdeployed,指定打包和执行的时间和内容。

如果~(ismcc || isdeployed) addpath(mypath);结束

逐步重构依赖于不可编译函数的应用程序

随着时间的推移,重构、精简和模块化包含不可编译或不可部署函数的MATLAB代码isdeployed.您的最终目标是“优雅地降级”不可部署的代码。换句话说,在实际消除代码之前,代码必须为最终用户提供尽可能少的部署障碍。

将代码划分为设计时和运行时代码部分:

  • 设计时代码是目前正在演进的代码。几乎所有的代码都要经历一个不断重写、调试和优化的阶段。在一些工具箱中,比如深度学习工具箱产品,代码会经历一段时间的自我训练,因为它会对各种数据排列和模式做出反应。这样的代码几乎从未被设计用于部署。

  • 运行时代码另一方面,它已经固化或变得稳定——它处于完成状态,可以由最终用户部署。

考虑为不打算部署的代码或调用不可部署代码的代码创建一个单独的目录。

不创建或使用非常量静态状态变量

避免使用下列物品:

  • MATLAB代码中的全局变量

  • mex文件中的静态变量

  • Java代码中的静态变量

这些变量的状态是持久的,并与流程中的所有东西共享。

在部署应用程序时,使用持久变量可能会导致问题,因为MATLAB运行时进程在单个线程中运行。您不能在同一个进程中加载多个这样的非常量静态变量。此外,这些静态变量在多线程应用程序中不能很好地工作。

在对打包的MATLAB代码进行编程时,您应该意识到MATLAB运行时为新类的每个实例创建。如果使用不同的变量名再次实例化相同的类,则将其附加到MATLAB运行时由同一类的前一个实例创建的实例。简而言之,如果程序集包含n唯一的类,会有最大的n的实例MATLAB运行时创建,每个对应于一个类的一个或多个实例。

如果必须使用静态变量,请将它们绑定到实例。例如,在Java类中定义实例变量要优于将变量定义为静态

为要部署的工具箱功能获取适当的许可证

您必须有一个有效的MathWorks®用于创建可部署的MATLAB代码的工具箱的许可证。

另请参阅

|

相关的话题