两者之间有什么区别?
据我了解,MATLAB编译器将MATLAB代码封装到.exe文件中,以便无需安装MATLAB即可使用,只需要MCR。除此之外,MATLAB Builder NE还可以用于生成.Net程序集,与.Net框架而不是.exe文件一起使用,但它们仍然需要MCR。
现在我不明白MATLAB Coder用的是什么?它生成C / C ++代码。但MATLAB代码是否真的转换为C / C ++,还是仅仅像MATLAB编译器那样打包?是否还需要MCR才能运行?
我知道这不是一个编程问题。但我搜索了互联网,但仍然没有找到明确的答案。这些是非常昂贵的产品,所以我想知道我要进入的是什么。
答案 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的其他信息。
答案 1 :(得分:2)
MATLAB Compiler SDK提供了针对MATLAB Runtime(MCR)运行的共享库。它支持MATLAB中的大多数功能,包括图形,并通过加密MATLAB代码来保护您的知识产权。
另一方面,MATLAB Coder提供可读和可移植的源代码。它支持MATLAB语言的一个子集,侧重于执行数值计算的算法。这个MATLAB答案详细比较了这两种方法:
例如,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编译器昂贵。