您的位置:首页 > 编程语言 > MATLAB

【转】matlab mex 应用接口程序,c…

2017-06-09 14:46 351 查看
最近在做一个基于matlab
GUI的程序,需要用来验证用户的算法正确性,所以需要提供一个C语言算法程序的接口,以便调用验证,最后找到了matlab的mex文件,通过mex文件,可以不用重新编写m文件移植算法,很方便。

mex文件时matlab调用别的程序语言编写的算法或程序的接口,从而达到提高计算效率的目的,然而mex文件要按照matlab规定的格式编写。

MEX文件编写要满足两个条件:1是哟球安装matlab软件及相关组件工具,2有合适的C语言编译器。

matlab官方mex介绍网址为:http://www.mathworks.com/support/tech-notes/1600/1605.html

一般情况下C编译器是用Microsoft的,用mex
-setup命令配置。

但是很多人像我一样没有微软的C编译器,用基于MinGW或Cygwin的C编译器:GCC。在mex
-setup设置里面没有相应的选项。

在这里介绍一下使用GCC编译器编译mex文件的设置方法,和使用以GCC为编译器的IDE软件编译mex文件方法。

gnumex?,一个设置gcc为mex文件编译器的matlab程序

软件说明地址:http://gnumex.sourceforge.net/

按照说明选用MinGW或者Cygwin编译器,然后进行相应的步骤就可以在matlab窗口使用mex命令编译mex文件。但是这样只能编译单一的文件,不能进行工程管理等相应IDE实现的功能。在这里介绍一下自己设置codeblocks的方法,使得可以在codeblocks中编译mex文件。在matlab中测试有效。

操作步骤:

假设你已经成功的安装了gnumex并且已经测试运行成功了。那么接着进行如下安装步骤。

1. 把gnumex中设置的path for library and
.def那个目录和所有的文件全部拷贝一份,放到你的matlab目录下。例如放在/gnumex。(里面会有一些编译mex用的lib和def文件)

2. 在你项目的linker
setting中加入\gnumex\libmex.lib库文件路径

3.在你项目的Searchdirectory中加入matlab头文件路径,例如E:\MATLAB\R2008b\extern\include;gnumex目录,例如:E:\MATLAB\R2008b\gnumex

4.设置过程输出为动态链接库文件.dll

5.可以开始写你的工程了,和普通工程一样,IDE会自动的维护工程文件。

一个简单的mex文件例子如下:

#include?"mex.h"??

void?timestwo(double?y[],double?x[])??

{??

y[0]=2.0*x[0];??

}??

void?mexFunction(int?nlhs,mxArray?*plhs[],int?nrhs,const?mxArray?*prhs[])??

{??

double?*x,*y;??

int?mrows,ncols;??

if(nrhs!=1)?mexErrMsgTxt("one?input?required!");??

else?if(nlhs>1)?mexErrMsgTxt("too?many?output?arguments");??

mrows=mxGetM(prhs[0]);??

ncols=mxGetN(prhs[0]);??

if(!mxIsDouble(prhs[0])||mxIsComplex(prhs[0])||!(mrows==1&&ncols==1))??

mexPrintf("intput?must?be?a?noncomplex?double");??

plhs[0]=mxCreateDoubleMatrix(mrows,ncols,mxREAL);??

x=mxGetPr(prhs[0]);??

y=mxGetPr(plhs[0]);??

timestwo(y,x);??

}?

?

当然你也可以自己写Makefile文件,相关设置参考codeblocks手册。次方法应该也适用于DEV++



转发至微博
 



转发至微博
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: