如何将 m 文件复制到 MATLAB 编译应用程序中的特定文件夹?

Posted

技术标签:

【中文标题】如何将 m 文件复制到 MATLAB 编译应用程序中的特定文件夹?【英文标题】:How can i copy m-files to a specific folder in MATLAB compiled application? 【发布时间】:2015-07-20 20:17:40 【问题描述】:

我正在使用 MATLAB R2015a 应用程序编译器。选择我的主 m 文件后,MATLAB 找到了一些应用程序运行所需的文件,但是在编译并运行我的应用程序后,编译后的应用程序无法从已安装的工具箱(第三方工具箱)中找到某些特定的 m 文件。

现在我想将所有工具箱文件复制到目标文件夹C:\Users\My_Account\AppData\Local\Temp\My_Account\mcrCache8.5\Program_70\DDMDDM 是我的工具箱文件夹,MATLAB 根据上面提到的嵌套文件自动创建它。我想将其他文件添加到此文件夹中。我怎样才能做到这一点?这是解决这个问题的好方法吗?

【问题讨论】:

您应该找出编译器在第三方工具箱中找不到文件的原因。复制到 mcr 的临时文件夹不是一个好的解决方案。您可以在编译时添加其他文件。 【参考方案1】:

你试图做的不会奏效。

当您使用 MATLAB Compiler 编译应用程序时,它会查找您的 main 函数所依赖的所有代码,对其进行加密,并将其打包成一个可执行文件,该可执行文件稍后将针对 MATLAB Compiler Runtime (MCR) 执行。

MCR 只能执行以这种方式加密和打包的代码 - 无法让它执行常规未加密的 MATLAB 文件。因此,将内容转储到 MCR 用于解包代码文件的临时文件夹将不会有任何效果。

请尝试找出原因,在依赖关系分析期间,MATLAB 编译器没有找到您的 main 函数所依赖的所有文件。

可能发生这种情况的原因有多种 - 依赖关系分析并不完美。例如,如果您的代码调用eval('myfunction'),则依赖关系分析将找不到myfunction。我最近answered另一个问题是另一个原因是问题。

在这些情况下,您可以显式告诉 MATLAB 编译器,使用 %#function 编译指示依赖于 myfunction。在包含对myfunction 的隐藏调用的文件中,在文件顶部(实际上是任何位置,但通常您会将其放在顶部),放置

%#function myfunction

然后,MATLAB 编译器将强制它成为一个依赖项并将其包含在打包中。

或者,当使用mcc 或在deploytool 应用程序中设置包时,您可以自己手动将myfunction 添加到包中(尽管这样不会找到myfunction 依赖的东西)。

【讨论】:

以上是关于如何将 m 文件复制到 MATLAB 编译应用程序中的特定文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 MATLAB libsvm 模型复制到 android 应用程序文件夹

我可以在 Windows 上使用 MATLAB 将一些 .m 编译成可以在 Linux 上运行的二进制文件吗?

如何将MATLAB创建的DLL文件反编译成mat文件

MATLAB编译器

用于 LINUX 的 MATLAB 编译器

Debian系统中如何将matlab编译后的代码集成到c++中