【转】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++
转发至微博
转发至微博
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++
转发至微博
转发至微博
相关文章推荐
- java 接口的简单程序
- matlab pause函数 程序暂停函数
- Matlab程序接口应用总结
- 我的linux学习11 程序与资源管理
- matlab调用C/C++程序,用mex
- 使用UCenter整合应用 – 用户注册
- & | ^ << >> 操作符在程序中的应用
- 在应用服务器上部署我的接口程序:weblogic/jboss/spring/hibernate/myeclipse
- 键盘扫描程序 FPGA
- Matlab P文件&mdash;&mdash;加快Matlab程序,保护你的算法
- Python应用-[用Python实现一个socket echo程序 && tcp socket的几个关闭状态]
- 在RHEL&nbsp;5中Yum应用大全
- ADO.NET的数据提供程序和数据连接——ADO.NET学习&应用笔记之二
- Struts的流程,应用&nbsp;标签库
- c#&nbsp;Winform创建安装程序(程序打包…
- matlab每日练习&nbsp;lenght函数
- 批处理应用:"添加/删除程序"修复
- Java中接口的应用 && 介绍
- VC中单步调试matlab mex程序
- java WEB应用中的中文乱码问题初探