[英]MATLAB .m file to .mex file using Matlab Compiler
我知道它可以說是一個非常著名的話題,但是我沒有找到任何可以幫助我解決這個問題的東西。
這是方案:
我有一個myFun.m函數,無論里面有什么,它都是一個通用函數,可能會依賴於其他工具箱。 它具有輸入和輸出;
我想生成類似的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項目中。 或將其交付給嵌入式設備。
您問題的主要答案是:
.m
代碼生成MEX文件文件,請手動將其重新編碼為C,然后進行混合,或者使用MATLAB Coder自動生成C代碼,然后進行混合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.