vc 編譯 matlab 的 mex 檔案
mex 檔案是 matlab 呼叫其他程式語言程式或演算法的介面。在 windows 環境中,
mex 檔案是擴充套件檔名為 dll 的動態鏈結庫,可以在 m 程式中直接呼叫,使用者可以通過
234 matlab 實用教程
matlab 提供的命令「mex」將 c 程式編譯成 mex 檔案,實現 matlab 環境下直接呼叫或
鏈結這些程式。mex 檔案必須在 c 語言編寫後用「mex」命令編譯生成,編寫時按照 matlab
規定的格式和步驟進行,採用 mex 函式庫中的函式與 matlab 進行互動,從 matlab 中獲
取資料並返回資訊。
本節在講述 mex 檔案系統設定、mex 函式和 mex 檔案建立方法的基礎上,通過例項說明
vc 編譯 matlab 中 mex 檔案的方法。
11.5.1 mex 檔案系統設定
編譯和生成 mex 檔案,需要安裝 matlab 應用程式介面元件及 c 語言編譯器。在
windows 環境下編譯 mex 檔案,編譯器必須支援 32 位的 windows 動態鏈結庫。第一次使用
mex 命令時必須通過命令視窗執行命令「mex –setup」進行適當配置,配置時第乙個問題可
選「n」,編譯器可選用「microsoft visual c/c++ version 6.0」。
11.5.2 mex 函式和 mex 檔案
mex-函式是 matlab 外部程式的介面函式,以 mex 為字首,用於實現 mex 檔案與
matlab 的互動,mexfunction 函式是 mex 檔案的核心。
mexfunction 的函式宣告如下:
void mexfunction(int nlhs,mxarray *plhs[ ], int nrhs,const mxarray *prhs[ ])
其中,nlhs 為輸出變數的個數;plhs 為指向輸出變數指標的陣列;nrhs 為輸入變數的個
數;prhs 為指向輸入變數指標的陣列。mexfunction 函式中的引數宣告是唯讀的,不能被修改,
matlab 呼叫 mex 程式時自動生成引數 nlhs、plhs、nrhs 和 prhs。
matalb 中相應函式的呼叫格式為「[a,b,…]=fun(c,d,…)」,a,b,… 為函式的輸出變數,
c,d,… 為函式的輸入變數,此時 nlhs 為 a,b,… 變數的個數,nrhs 為 c,d,… 變數的
個數。例如,呼叫名為 engwm 的檔案,可在 matlab 的命令列輸入「[a,b,c]=engwm(x,y)」,
執行後 nrhs=2、nlhs=3、並建立指標陣列 prhs[0]-> x、prhs[1]->y,這時輸出變數還沒有建立,
指標陣列中 plhs[0]、plhs[1]、plhs[2]均指向 null。
函式 mexerrmsgtxt 用於顯示錯誤資訊,顯示完畢後立即終止當前執行的 mex 程式(這
與其他顯示函式不同)。其他 mex 函式可參閱 matlab 的幫助文件。
下面通過編寫顯示字串的程式,說明 mex 檔案的建立和使用方法。
(1)編寫 c 語言程式**
vc 中新建檔案 good.cpp 並將其儲存在指定目錄中(如 e:\mex),如圖 11-22 所示。
good.cpp 的**如下:
#include 「mex.h」
void mexfunction(int nlhs,mxarray *plhs[ ],int nrhs, const mxarray *prhs[ ])
這裡,必須包含標頭檔案 mex.h(該檔案包含定義矩陣的標頭檔案 matrix.h 和 mex 函式的聲
第 11 章 編譯器與外部介面 235
明),mexprintf 函式(只能用於 mex 程式)與 printf 函式的用法基本相同。
圖 11-22 建立檔案 good.cpp
(2)編譯 good.cpp
開啟 matlab 平台並將工作目錄改為 good.cpp 所在目錄 e:\mex,輸入命令「mex
good.cpp」,則在目錄 e:\mex 下生成同名 dll 程式 good.dll。
(3)執行 good.dll
MATLAB編譯C 問題(MEX檔案)
由於作業原因,需要matlab和c 聯合程式設計,matlab編譯c 檔案遇到一系列問題,現在彙總如下 首先關於大部分基礎知識,參閱這篇文章 matlab與c c 聯合程式設計之從matlab呼叫c c 執行mex setup後,matlab顯示如下 由於我使用的是matlab 2013a vs20...
MATLAB的通訊mex編譯問題及解決方法
查了一些相關資料matlab的通訊最好用32位的matlab,對於是不是64位的系統無所謂,但是一定要裝32位的matlab,否則生成不了mexw32檔案 1.通過udp編寫的c與matlab混合編寫的點c檔案如下 send.c include mex.h include include defin...
matlab設定mex接駁的C C 編譯器
使用c c 編寫核心演算法,使用matlab呼叫演算法 做上層封裝,通常是提公升效率並提供易用性的乙個不錯的選擇。mex需要設定接駁的c c 編譯器,官方文件在這裡 簡要總結下 windows 在windows下用visual studio作為c c 編譯器,允許mex設定或切換在不同版本的vs m...