45

What's the difference between the two?

As far as I understand it, MATLAB Compiler wraps the MATLAB code into a .exe file so that it can be used without installing MATLAB, and only requires the MCR. On top of it MATLAB Builder NE can also be used to produce .Net assemblies to be used with .Net framework instead of the .exe file, but they still require MCR.

Now I don't understand what MATLAB Coder used for? It generates C/C++ code. But is the MATLAB code really converted into C/C++, or is it merely packaged like in the case of MATLAB Compiler? Does it also need the MCR to run?

I understand that this is not exactly a programming question. But I have searched the internet and still haven't found a clear answer. These are very expensive products so I would like to know what I am getting into.

4

4 回答 4

65

MATLAB Compiler加密和归档您的 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 Compiler适用于您希望简单且(相当)直接地与没有 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 类

MATLAB Builder EX for Microsoft Excel:生成 Excel 插件。

在 R2015a 中,我们有:

MATLAB 编译器:生成 .exe 和 Excel 插件

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

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


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


可以在此处找到有关区分MATLAB Coder 和 MATLAB Compiler for C/C++ 的其他信息。

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

于 2013-08-08T14:35:33.380 回答
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-cc

例如,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 中的运行速度一样快。

于 2015-09-15T21:44:53.027 回答
0

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

于 2013-08-08T14:03:22.073 回答
0

MATLAB coder 生成 C/C++ 代码,这也可能依赖于第三方库,例如英特尔的 TBB/IPP。如果您想要真正的普通 C/C++ 代码,则需要 MATLAB 的嵌入式编码器。

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

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

于 2020-04-10T19:44:13.390 回答