簡體   English   中英

MATLAB 編譯器與 MATLAB 編碼器

[英]MATLAB Compiler vs MATLAB Coder

兩者有什么區別?

據我了解,MATLAB Compiler 將 MATLAB 代碼包裝成 .exe 文件,這樣就可以在不安裝 MATLAB 的情況下使用它,並且只需要 MCR。 最重要的是,MATLAB Builder NE 還可用於生成與 .Net 框架一起使用的 .Net 程序集,而不是 .exe 文件,但它們仍然需要 MCR。

現在我不明白 MATLAB Coder 是干什么用的? 它生成 C/C++ 代碼。 但是 MATLAB 代碼真的轉換成 C/C++ 了嗎,還是只是像 MATLAB Compiler 那樣打包? 它還需要 MCR 才能運行嗎?

我知道這不完全是一個編程問題。 但是我在網上搜索了一下,仍然沒有找到明確的答案。 這些是非常昂貴的產品,所以我想知道我在做什么。

MATLAB Compiler對您的 MATLAB 代碼(仍為 MATLAB .m代碼)進行加密和存檔,並將其打包在一個精簡的可執行文件(.exe 或 .dll)包裝器中。 它與 MATLAB Compiler Runtime (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 Compiler不再生成 .dll 組件。 此功能已移至新產品MATLAB Compiler SDK ,其中還包括生成 .NET 程序集和 Java 類的功能。 在 R2015a 之前,此功能曾經出現在產品MATLAB Builder NE for .NETMATLAB Builder JA for Java 中

換句話說:

在 R2014b 及更低版本中,我們有:

MATLAB Compiler :生成 .exe 和 .dll 組件

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

MATLAB Builder JA for Java :生成 Java 類

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

在 R2015a 中,我們有:

MATLAB Compiler :生成 .exe 和 Excel 插件

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

MATLAB Coder的范圍和用例在這些版本中沒有變化(盡管有新功能)。


編輯:從 R2015b 開始, MATLAB Compiler SDK也生成 Python 包。


可以在此處找到有關區分MATLAB Coder 和 MATLAB Compiler for C/C++ 的其他信息。

用於代碼生成的不同MATLAB 產品的比較表。

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 中的運行速度一樣快。

我不是專家,但 Coder 被描述為生成獨立的C/C++ 代碼,沒有提到 MCR。 但是我注意到它說它只支持 Matlab 語言的“子集”,您可以在此處閱讀更多信息。 編譯器似乎只是按照您的建議打包了您的 Matlab 代碼,因此可能支持大多數功能。

MATLAB 編碼器生成 C/C++ 代碼,這些代碼也可能依賴於 3rd 方庫,例如 intel 的 TBB/IPP。 如果您想要真正普通的 C/C++ 代碼,則需要 MATLAB 的嵌入式編碼器。

另一方面,MATLAB 編譯器生成針對 MCR(Matlab 運行時庫)運行的加密可執行文件/庫/等。 這需要目標計算機預先安裝 MCR(免費)。 由於 MCR 的大小超過 1 GB,因此無法重新定位。

MATLAB 編碼器也比 MATLAB 編譯器更昂貴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM