MATLAB编译器和MATLAB Coder的区别

46

这两者有什么区别?

据我了解,MATLAB编译器将MATLAB代码封装成.exe文件,以便在没有安装MATLAB的情况下使用,只需要安装MCR(MATLAB Runtime)。此外,MATLAB Builder NE也可以用于生成.NET程序集,以与.NET框架一起使用,而不是使用.exe文件,但仍需要安装MCR。

现在我不明白MATLAB Coder的作用是什么?它生成C/C++代码。但是MATLAB代码是否真的转换为C/C++,还是仅像MATLAB编译器一样打包?它运行时是否也需要MCR?

我知道这不完全是一个编程问题。但是我已经搜索了互联网,仍然没有找到清晰的答案。这些都是非常昂贵的产品,所以我想知道自己要掌握什么。


3
这个问题将是用户更新和编辑matlab-codermatlab-compiler标签维基的完美机会。后者似乎是Matlab本身的通用和特定的。 - horchler
1
@horchler 很好的观点,我已经编辑了matlab-compiler标签。它们仍然有点简洁,但我没有更好的东西。 - Dennis Jaheruddin
4个回答

66

MATLAB编译器将您的MATLAB代码(仍然是MATLAB.m代码)加密并打包到一个薄型可执行文件(.exe.dll)包装器中。这个包装器连同MATLAB编译器运行时(MCR)一起交付给最终用户。如果需要,MCR也可以被打包在可执行文件内。

MCR是免费可再分发的,可以将其视为没有前端桌面的MATLAB副本。

当用户运行可执行文件时,它会解包和解密MATLAB代码,并针对MCR而不是MATLAB运行它。通过这种方式交付的应用程序应该与MATLAB内部运行的完全相同(包括相同的速度)。

MATLAB Coder将MATLAB语言的子集转换为C代码。这可以被用于许多不同的方式,包括作为mex文件带回MATLAB,使用C编译器编译以从另一个应用程序调用,或传递到嵌入式设备。由于它是C代码而不是MATLAB代码,它通常比原始MATLAB代码运行得更快(虽然并非总是如此)。C代码不需要MCR。支持的MATLAB语言子集非常广泛,但在提交此工作流程之前,需要查看一些值得注意的限制。生成的代码是C代码,但如果您需要使用C ++编译器而不是C编译器,则可以生成C ++包装器。

MATLAB编译器是为您想要简单而(相对)直接地与没有MATLAB副本的人分享已编写的MATLAB应用程序的用例而设计的。由于部署的.m代码是加密的,因此还可以用于共享MATLAB代码并保护知识产权。

MATLAB Coder具有其他用途,例如希望通过转换为mex文件加快MATLAB代码或需要为另一个应用程序或嵌入式设备生成C代码。

如果您有更详细的问题,我真的建议您打电话给MathWorks并询问他们。


编辑:上述信息适用于 MATLAB R2014b及以下版本。从 MATLAB R2015a开始,来自 MATLAB Compiler 的功能已与来自 MATLAB Builder 产品的功能混合,并且还有一个新产品 MATLAB Compiler SDK

从R2015a开始,MATLAB Compiler 的工作方式与上述描述相同(即加密、归档和打包,但不生成C代码),但现在将其打包为 .exe 和 Excel 添加项 (.xla)。在R2015a之前,这个功能曾经存在于产品 MATLAB Builder EX for Excel 中。

从R2015a开始,MATLAB Compiler 不再生成 .dll 组件。这个功能已经移动到新产品 MATLAB Compiler SDK 中,该产品还包括生成 .NET 程序集和 Java 类的功能。在R2015a之前,这个功能曾经存在于产品 MATLAB Builder NE for .NET MATLAB Builder JA for Java 中。

换句话说:

在R2014b及以下版本中,我们有:

MATLAB Compiler: 生成 .exe 和 .dll 组件

MATLAB Builder NE for .NET: 生成 .NET 程序集

MATLAB Builder JA for Java: 生成 Java 类

MATLAB Builder EX for Microsoft Excel: 生成 Excel 添加项。

在R2015a中,我们有:

MATLAB Compiler: 生成 .exe 和 Excel 添加项

MATLAB Compiler SDK: 生成 .dll、.NET 程序集和 Java 类。

MATLAB Coder 的范围和用例在这些版本中没有改变(尽管有新功能)。


编辑:从R2015b开始,MATLAB Compiler SDK 还可以生成 Python 包。


有关区分MATLAB Coder和MATLAB Compiler for C/C++的更多信息,请单击此处

不同MATLAB产品代码生成的比较表


@Chetan Rawal,你是否有关于新的2016a版本的任何信息?你已经提供了足够的信息,但我只是想知道2016年是否产生了任何新的信息。 - KDecker
有关图形和GUI编译的能力,反馈如何? - Vass
1
@Vass 你可以编译使用图形窗口的GUI应用程序。 - Sam Roberts

2
MATLAB Compiler SDK提供可运行于MATLAB Runtime(MCR)的共享库。它支持MATLAB的大多数功能,包括图形,并通过加密MATLAB代码来保护您的知识产权。
另一方面,MATLAB Coder提供可读性强且可移植的源代码。它支持MATLAB语言的一个子集,专注于执行数值计算的算法。
这个MATLAB Answers更详细地比较了这两种方法。

http://www.mathworks.com/matlabcentral/answers/223937-should-i-use-matlab-compiler-sdk-or-matlab-coder-to-integrate-my-matlab-applications-with-c-c

例如,MATLAB Compiler SDK 只能部署到支持 MATLAB 的平台(Windows、Mac、Linux),而 MATLAB Coder 生成的 C 代码可以在任何支持 C 代码的平台上运行。
此外,从 MATLAB Compiler SDK 打包的代码是加密的,以保护知识产权,而从 MATLAB Coder 生成的 C 代码可以像手写的 C 代码一样进行保护。
值得注意的是,从 MATLAB Coder 生成的 C 代码具有更快的执行速度潜力,而来自 MATLAB Compiler SDK 的打包代码将与在 MATLAB 中运行的速度相同。

0

MATLAB Coder 生成C/C++代码,还可以依赖于第三方库,例如英特尔的TBB/IPP。如果您想要真正的原始C/C++代码,您需要使用MATLAB的嵌入式编码器。

另一方面,MATLAB编译器会产生加密的可执行文件/库等,这些文件运行时需要使用MCR(Matlab运行库)。这需要目标计算机预先安装MCR(免费)。由于MCR的大小超过1GB,不太适合重新定位。

MATLAB Coder比MATLAB Compiler更昂贵。


这里MATLAB Coder和Embedded Coder之间的区别并不准确。当硬件设置为“MATLAB Host”时,在某些情况下会使用库。即使没有Embedded Coder,您也可以更改硬件设置以获取vanilla C或C ++。Embedded Coder在MATLAB Coder或Simulink Coder的基础上添加了更多自定义、优化和验证工作流程。 - Ryan Livingston

0
我不是专家,但编码器被描述为生成独立的C/C++代码,没有提到MCR。然而,我注意到它说它只支持Matlab语言的“子集”,你可以在这里阅读更多信息。编译器似乎只是像你建议的那样打包你的Matlab代码,因此可能支持大多数功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接