【问题标题】:Creating a standalone app from Matlab code从 Matlab 代码创建一个独立的应用程序
【发布时间】:2011-03-13 00:31:24
【问题描述】:

我有一些 Matlab 代码和一个 GUI,我想制作一个独立的 .exe,以便它可以在没有安装 Matlab 的计算机上使用。

我知道 Matlab 编译器以及如何使用它,但这会创建一个仅在用户安装了 MATLAB Compiler Run-Time (MCR) 时才有效的 .exe。

我感兴趣的是,是否有任何方法可以创建仍使用 Matlab 代码但不依赖于 MCR 的独立 .exe。我希望它只在您单击它时运行,而无需安装其他任何东西。

我知道C可以使用Matlab,有什么方法可以使用C的代码吗?有什么开源的 Matlab 替代品可以吗?

作为最后的手段,如果我用另一种语言重写 Matlab 代码,你会推荐哪种语言?我在考虑 C 或 Python。

谢谢。

【问题讨论】:

  • 大多数答案似乎已经过时了。如果您的目标没有 matlab,您可以使用带有 'include MCR' 选项的 MATLAB 编译器,但文件会很大。另一种方法是按照@Amro 的建议使用 matlab Coder。

标签: matlab matlab-deployment matlab-compiler


【解决方案1】:

我进行了一些研究,恐怕您唯一的选择是使用 MCR,或者将您的代码转换为另一种语言。 MathWorks 希望您仅使用他们的编译器来创建 .exe 文件是有道理的。

仅当您已经熟悉另一种语言和/或您有足够的时间来完成您想要完成的事情时,才可以考虑使用它们。此外,如果您在 Matlab 中使用不是您编写的函数,那么您还必须编写这些函数,这可能非常困难/不可能。

如果以上都不是问题,那么您应该使用哪种语言真的取决于您。您不仅限于 C 和 Python。我认为,Matlab 与其他常用语言非常相似,至少在语法方面。无论哪种方式,您都必须进行一些学习,因此我建议您要么使用您知道的语言,要么选择一种容易找到帮助的语言。 C# 和 Java 是两种比较“著名”的语言。

【讨论】:

  • 是的,这只是一厢情愿。不过 MCR 是免费的,所以没什么大不了的。只是对用户的烦恼。老实说,我并没有考虑重写代码。就像我说的,这只是最后的手段(我可能会在不得不求助之前找个借口>_>)。
【解决方案2】:

MCR 是必需的,但有一个技巧:它实际上不必安装,只需在 PATH 上可用。运行 MCR 的东西不需要任何注册表项或安装过程中的任何其他特殊内容。您只需要可读的 MCR 文件和可通过正常查找机制定位的 DLL,其中包括在程序启动时检查 PATH。

例如,我使用“安装”在网络驱动器上的 MCR 运行已编译的 Matlab 应用程序。您在一台机器上运行 MCR 安装程序并将其安装到网络驱动器 X:\Matlab\MCR\R2010b-win32 而不是通常的 C:\Program Files 位置。然后让您的程序通过一个包装脚本启动,该脚本在调用您的实际 .exe 文件之前将 X:\Matlab\MCR\R2010b-win32\bin\win32 添加到 PATH 中,并且它将在任何其他看到相同驱动器的机器上运行,即使 MCR 安装程序尚未安装跑在他们身上。 (最终我们停止了,因为从网络加载 MCR 会影响性能。)

您可以使用此技巧将 MCR 与您的应用程序捆绑在一起。将整个 MCR 安装(安装产生的目录树,而不是安装程序本身)粘贴到应用程序目录树的子目录中,并让应用程序的入口点是 .bat 文件或粘贴该 MCR 目录的其他包装脚本在运行依赖于 MCR 的 .exe 文件之前在 PATH 上。

当然,请咨询您的法律人员,确保这不会违反您的许可条款。

【讨论】:

    【解决方案3】:

    Matlab 的“编译器”不是编译器。它将 Matlab m 代码转换为 C++ 代码,然后将其发送到实际的编译器,例如 Visual Studio 中的编译器等。它生成的代码并不是真正的人类可读的。

    要制作独立的应用程序,请安装以下工具箱(无论您支付什么价格):

    MATLAB Builder JA、MATLAB Builder NE、MATLAB 编译器

    通过将 Matlab 编译器指向驱动器上的实际编译器来设置它(即 mbuild -setup)。

    选择编译器: [1] C:\Program Files (x86)\Microsoft Visual Studio 9.0 中的 Microsoft Visual C++ 2008 SP1

    然后使用(即类型 deploytool)制作 main 并定义各种辅助函数等。Sect windows 控制台或独立。然后点击构建。它将为您制作 exe 文件。也可以根据需要编译成DLL等。

    较新版本的“编译器”支持编译 eval,所有获得许可的工具箱,它支持导入 java 类,例如,用于 xml 文件解析的 DOM 等。

    要在没有安装 Matlab 的计算机上使用生成的 exe 文件,您需要获取 Matlab MCR 并安装它。 MCR 必须与您用于制作编译代码的 Matlab 版本完全匹配。

    问候,

    伊万

    【讨论】:

      【解决方案4】:

      MathWorks 最近推出了一款新产品MATLAB Coder。它能够从您的 MATLAB 代码生成 C\C++ 代码(生成源代码而不是可执行文件)。生成的代码是可移植的并且不依赖于 MCR,尽管它只支持核心 MATLAB 语言功能的一个子集。

      【讨论】:

      • 那么是否能够生成具有所有 matlab 功能(例如绘图和 GUI)的 .exe?
      • MATLAB Coder 生成 C/C++ 源代码,您可以将其编译成可执行的二进制文件。请注意,它不支持为任何类型的绘图或 GUI 生成 C/C++ 代码。 language subset supported 以及用于代码生成的 functions and toolboxes supported 集都有很好的文档记录。
      • MATLAB Compiler(完全不同的工具箱)使您能够几乎按原样部署 MATLAB 代码(绘图、GUI 等)。它将所有代码打包到一个程序中,该程序在MCR runtime(作为 MATLAB 引擎的剥离版本)上解释和执行,最终用户可免费下载
      【解决方案5】:

      自从我查看 MATLAB 编译器已经有一段时间了,但如果我没记错的话,它曾经能够生成 C/C++ 代码,而不是全力以赴并生成可执行文件。挂断始终是您的代码使用的工具箱以及编译器是否支持它们。您是否有机会在服务器上安装 MATLAB 应用程序并使用桌面客户​​端电话获取结果?

      就其他语言而言,我会结合 matplotlib (matplotlib.sf.net) 查看 NumPy and SciPy。我现在正在与一位 MATLAB 开发人员合作,到目前为止,他对这种体验非常满意。

      【讨论】:

      • “您可以在服务器上安装 MATLAB 应用程序并使用桌面客户​​端电话获取结果”——这对我来说可能工作量太大。我只是好奇是否有比安装 MCR 更方便的方法。我认识的大多数人都讨厌安装一些东西来运行一个小应用程序。感谢您对 NumPy 和 matplotlib 的建议。我会记住这些。
      猜你喜欢
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 2013-01-24
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      相关资源
      最近更新 更多