MATLAB编译器与MATLAB编码器

时间:2013-08-08 12:45:46

标签: matlab matlab-deployment matlab-compiler matlab-coder

两者之间有什么区别?

据我了解,MATLAB编译器将MATLAB代码封装到.exe文件中,以便无需安装MATLAB即可使用,只需要MCR。除此之外,MATLAB Builder NE还可以用于生成.Net程序集,与.Net框架而不是.exe文件一起使用,但它们仍然需要MCR。

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

我知道这不是一个编程问题。但我搜索了互联网,但仍然没有找到明确的答案。这些是非常昂贵的产品,所以我想知道我要进入的是什么。

4 个答案:

答案 0 :(得分:61)

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编译器的功能与 MATLAB Builder 产品的功能重新混合,还有一个新产品 MATLAB编译器SDK

从R2015a开始, MATLAB编译器的工作方式与上述相同(即加密,存档和打包,但不生成C),但现在打包为.exe,并作为Excel加载项(.xla)。在R2015a之前,此功能过去出现在产品 MATLAB Builder EX for Excel 中。

自R2015a起, MATLAB编译器不再生成.dll组件。此功能已移至新产品 MATLAB编译器SDK ,其中还包括生成.NET程序集和Java类的功能。在R2015a之前,此功能过去常见于 MATLAB Builder NE for .NET MATLAB Builder JA for Java

换句话说:

在R2014b及以下,我们有:

MATLAB编译器:生成.exe和.dll组件

用于.NET的MATLAB Builder NE :生成.NET程序集

MATLAB Builder JA for Java :生成Java类

用于Microsoft Excel的MATLAB Builder EX :生成Excel加载项。

在R2015a中,我们有:

MATLAB编译器:生成.exe和Excel加载项

MATLAB编译器SDK :生成.dll,.NET程序集和Java类。

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


编辑:从R2015b开始, MATLAB编译器SDK 也会生成Python包。


有关区分MATLAB Coder and MATLAB Compiler for C/C++ can be found here的其他信息。

不同MATLAB Products for code generation的比较表。

答案 1 :(得分:2)

MATLAB Compiler SDK提供了针对MATLAB Runtime(MCR)运行的共享库。它支持MATLAB中的大多数功能,包括图形,并通过加密MATLAB代码来保护您的知识产权。

另一方面,MATLAB Coder提供可读和可移植的源代码。它支持MATLAB语言的一个子集,侧重于执行数值计算的算法。

这个MATLAB答案详细比较了这两种方法:

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中的打包代码经过加密以保护IP,而MATLAB Coder生成的C代码可以像手工编写的C代码一样受到保护。

同样值得注意的是,MATLAB Coder生成的C代码具有更快的执行速度,而MATLAB Compiler SDK的打包代码运行速度与MATLAB一样快。

答案 2 :(得分:0)

我不是专家,但编码器被描述为生成独立 C / C ++代码,没有提及MCR。然而我注意到它说它只支持Matlab语言的“子集”,你可以阅读更多关于here的内容。编译器似乎只是按照你的建议打包你的Matlab代码,所以可能支持大多数功能。

答案 3 :(得分:0)

MATLAB编码器生成C / C ++代码,该代码也可能依赖于第三方库,例如intel的TBB / IPP。如果您想要真正的原始C / C ++代码,则需要MATLAB的嵌入式编码器。

另一方面,MATLAB编译器会生成针对MCR(Matlab运行时库)运行的加密可执行文件/库/等。这要求目标计算机预先安装MCR(免费)。由于MCR的大小超过1 GB,因此重定向的可能性不大。

MATLAB编码器也比MATLAB编译器昂贵。