簡體   English   中英

使用Matlab編譯器將MATLAB .m文件轉換為.mex文件

[英]MATLAB .m file to .mex file using Matlab Compiler

我知道它可以說是一個非常著名的話題,但是我沒有找到任何可以幫助我解決這個問題的東西。

這是方案:

  1. 我有一個myFun.m函數,無論里面有什么,它都是一個通用函數,可能會依賴於其他工具箱。 它具有輸入和輸出;

  2. 我想生成類似的myFun.mex函數;

我有Matlab編譯器,可以將myFun.m編譯為

mcc -v -W lib:libmyFun -T link:lib myFun

通過這種方式,我得到了一些新文件:

libmyfun.c

libmyfun.dll

libmyfun.exp

libmyfun.exports

libmyfun.h

libmyfun.lib

閱讀並遵循Loren的示例,我想我必須創建一個myfun.cpp,其中包含非常著名的網關功能

/* The gateway function */
void mexFunction(int nlhs, mxArray *plhs[],
                 int nrhs, const mxArray *prhs[])
{
/* variable declarations here */

/* code here */
}

我嘗試這樣做,並調用了生成mex的例程:

mex('-v', 'myfun.cpp')

但是我遇到了幾個錯誤,我必須說myfun.cpp是復制/粘貼功能,我對...尤其是在輸入/輸出管理方面有很多疑問。

我的問題是...除了myfun.cpp函數可能由於我不是C / C ++開發人員而可能充滿錯誤之外...該過程是否正確? 如果答案是“是”,那么有人知道編寫myfun.cpp的通用方法是什么嗎?

干杯,

塞巴斯蒂安

MATLAB Compiler不會執行您想要的操作。

MATLAB Compiler會使用您的.m代碼並將其加密並存檔到.ctf (組件技術文件)文件中。 然后,它會生成一個瘦包裝器( .exe文件或.dll庫文件,以及允許從C調用該庫的文件)。 您將.ctf文件和包裝以及可自由重新分發的MCR(MATLAB編譯器運行時)一起交付給最終用戶。 可以將前兩個或所有三個包裝到一個單元中,以便於分發。

最終用戶運行可執行文件或庫,該可執行文件或庫將對.m代碼進行歸檔和解密,並針對MCR而非MATLAB運行它。 您可以將MCR基本上看作是MATLAB的副本,但沒有前端桌面環境。

MATLAB Compiler適用於您想要與沒有MATLAB的人輕松共享MATLAB應用程序或算法的用例。 因為代碼是加密的,所以您也可以使用它來保護您的知識產權。 但是代碼仍然是.m代碼,並且執行的方式與在MATLAB中一樣,包括相同的速度。

MEX完全不同。 如果您有使用C代碼實現的算法,則可以向其中添加您提到的“網關”例程,然后使用命令mex將其編譯到庫中,然后可以從MATLAB調用該庫,就好像它是常規的MATLAB命令或函數一樣。 MEX功能是常規MATLAB的一部分,不需要任何附加產品。

還有另一個產品MATLAB Coder與MATLAB Compiler不同。

MATLAB Coder接收屬於MATLAB語言子集的.m代碼,並將其轉換為C代碼。 該子集非常廣泛,但是對支持的MATLAB語言部分有一些重大限制。 恐怕這些限制包括許多工具箱功能,包括Neural Networks Toolbox的某些功能。

然后,您可以使用該C代碼做很多事情,包括使用MEX將其編譯回可以用作MATLAB命令的形式。 盡管並非總是如此,但通常可以大大提高原始.m代碼的速度。 您還可以做其他事情,例如將C代碼集成到更廣泛的C項目中。 或將其交付給嵌入式設備。

您問題的主要答案是:

  1. MATLAB編譯器無法滿足您的需求。
  2. 要從.m代碼生成MEX文件文件,請手動將其重新編碼為C,然后進行混合,或者使用MATLAB Coder自動生成C代碼,然后進行混合。

暫無
暫無

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

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