MATLAB编译器与MATLAB编码器

两者有什么区别?

据我了解,MATLAB Compiler将MATLAB代码封装到一个.exe文件中,以便在不安装MATLAB的情况下使用,只需要MCR。 除此之外,MATLAB Builder NE还可用于生成.Net程序集,以便与.Net框架一起使用,而不是使用.exe文件,但仍然需要MCR。

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

我明白,这不完全是一个编程问题。 但是我search了互联网,至今还没有find明确的答案。 这些是非常昂贵的产品,所以我想知道我正在进入。

MATLAB编译器将您的MATLAB代码(保留为MATLAB .m代码)进行encryption和归档,并将其打包为一个精简的可执行文件(.exe或.dll)包装器。 这是随MATLAB编译器运行时(MCR)一起提供给最终用户的。 如果你愿意,MCR也可以打包在可执行文件中。

MCR可以自由的重新分配,你可以把它看作本质上没有前端桌面的MATLAB的副本。

当用户运行可执行文件时,它将对MATLAB代码进行归档和解密,然后对MCR而不是MATLAB进行运行。 因此,通过这种方法交付的应用程序应该与MATLAB中的完全相同(包括相同的速度)。

MATLAB编码器将MATLAB语言的一个子集转换为C代码。 这可以以多种方式使用,包括作为mex文件返回到MATLAB,使用C编译器编译为从另一个应用程序调用,或者传递到embedded式设备。 由于它是C代码而不是MATLAB代码,所以它经常(虽然不总是)比原来的MATLAB代码运行速度快得多。 C代码不需要MCR。 MATLAB语言支持的子集非常广泛,但是在提交此工作stream程之前,您还是需要考虑一些显着的限制。 生成的代码是C代码,但如果您需要使用C ++编译器而不是C编译器,则可以生成C ++包装器。

MATLAB编译器专门用于你想简单地(相当)直接地共享一个你写的MATLAB应用程序与没有MATLAB副本的人共享的用例。 由于部署的.m代码是encryption的,所以它也可以用来共享MATLAB代码,同时保护知识产权。

MATLAB Coder还有其他一些用例,例如想要通过转换为mex文件来加速MATLAB代码,或者需要为其他应用程序或embedded式设备生成C代码。

如果您有更详细的问题,我真的build议您只需调用MathWorks并询问它们。


编辑 :上面的信息是正确的版本的MATLAB R2014b及以下。 从MATLAB R2015a开始, MATLAB Compiler的function已经与MATLAB Builder产品的function进行了混合,还有一个新的产品MATLAB Compiler SDK

从R2015a开始, MATLAB Compiler的工作方式与上述相同(即encryption,存档和打包,但不生成C),但现在将打包为.exe和Excel加载项(.xla)。 在R2015a之前,这个function曾经出现在产品MATLAB Builder EX for Excel中

从R2015a开始, MATLAB编译器不再生成.dll组件。 这个function已经被转移到新产品MATLAB编译器SDK中 ,该编译器SDK还包括生成.NET程序集和Java类的function。 在R2015a之前,这个function曾经出现在产品MATLAB Builder NE for .NETMATLAB Builder JA for Java的产品中

换一种说法:

在R1414b及以下,我们有:

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

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

用于Java的MATLAB Builder JA :生成Java类

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

在R2015a,我们有:

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

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

MATLAB Coder的范围和用例在这些版本中并没有改变(虽然有新的function)。


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


有关区分MATLAB编码器和C / C ++的MATLAB编译器的更多信息可以在这里find 。

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

MATLAB编译器SDK提供了针对MATLAB运行时(MCR)运行的共享库。 它支持MATLAB中的大部分function,包括graphics,并通过encryption您的MATLAB代码来保护您的知识产权。

MATLAB编码器,另一方面,提供可读和便携式的源代码。 它支持专注于执行数值计算的algorithm的MATLAB语言子集。

这个MATLAB的答案进入更多的细节比较这两种方法:

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

例如,MATLAB Compiler SDK只能部署到支持MATLAB(Windows,Mac,Linux)的平台上,而MATLAB Coder则生成可在任何支持C代码的平台上运行的C代码。

另外,MATLAB编译器SDK的打包代码被encryption以保护IP,而MATLAB编码器生成的C代码可以像手写C代码一样受到保护。

另外值得一提的是,MATLAB编译器生成的C代码具有更快执行的潜力,而MATLAB编译器SDK的编译代码运行速度将与MATLAB中一样快。

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