[英]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 .NET和MATLAB 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 更詳細地比較了這兩種方法:
例如,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.