VC 編譯 MATLAB 的 mex 檔案

2022-08-13 19:09:14 字數 2153 閱讀 1813

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...