MATLAB编译器与MATLAB编码器

Win*_*der 43 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才能运行?

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

Sam*_*rts 63

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编译器以与上述相同的方式工作(即加密,存档和包,但不生成C),但现在将打包为.exe和Excel加载项(.xla).在R2015a之前,此功能曾出现在产品MATLAB Builder EX for Excel中.

从R2015a开始,MATLAB编译器不再生成.dll组件.此功能已移至新产品MATLAB Compiler SDK,该产品还包括生成.NET程序集和Java类的功能.在R2015a之前,此功能过去曾出现在产品MATLAB Builder NE for .NETMATLAB 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 Compiler SDK也生成Python包.


有关区分MATLAB编码器和MATLAB编译器C/C++的更多信息,请参见此处.

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