Mex文件及其编译
2015-11-22 11:13
330 查看
TLD在tldtracking中调用了lk。这个lk实际是lk.mexw64,Source文件是lk.cpp。
Matlab中的mex函数通过C编译器(如VS2013)对C source进行编译、链接,形成一个mex文件(64位机就是mexw64),这个mex文件可以被Matlab引擎调用。
1. 编译过程:
mex -setup选择编译器
mex filenames:比如mex yprime.c(这个是Matlab的Help中的例子,直接搜“mex”)。最终会形成一个yprime.mexw64,并可以在matlab中调用成功(调用时的传递参数只是两个input argument,后面会讲):
2. c source file格式
yprime.c的格式如下:
可以看出,这个c文件中有一个mexFunction,它就是Matlab调用C文件的参数传递接口函数,四个参数释义如下:
p指pointer,n指number,rhs指right hand side(输入参数),l指left hand side(输出参数)。
我们在调用yprime.mexw64时,传递的是两个输入参数,就是nrhs(T=1)和prhs(Y=1:4),而plhs是在yprime.c中定义的,直接作为调用的返回值。mexFunction的具体函数如下,可以看到,到最后才调用了yrime的函数,前面都是对输入参数处理:
Matlab中的mex函数通过C编译器(如VS2013)对C source进行编译、链接,形成一个mex文件(64位机就是mexw64),这个mex文件可以被Matlab引擎调用。
1. 编译过程:
mex -setup选择编译器
mex filenames:比如mex yprime.c(这个是Matlab的Help中的例子,直接搜“mex”)。最终会形成一个yprime.mexw64,并可以在matlab中调用成功(调用时的传递参数只是两个input argument,后面会讲):
2. c source file格式
yprime.c的格式如下:
可以看出,这个c文件中有一个mexFunction,它就是Matlab调用C文件的参数传递接口函数,四个参数释义如下:
p指pointer,n指number,rhs指right hand side(输入参数),l指left hand side(输出参数)。
我们在调用yprime.mexw64时,传递的是两个输入参数,就是nrhs(T=1)和prhs(Y=1:4),而plhs是在yprime.c中定义的,直接作为调用的返回值。mexFunction的具体函数如下,可以看到,到最后才调用了yrime的函数,前面都是对输入参数处理:
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray*prhs[] ) { double *yp; double *t,*y; size_t m,n; /* Check for proper number of arguments */ if (nrhs != 2) { mexErrMsgIdAndTxt( "MATLAB:yprime:invalidNumInputs", "Two input arguments required."); } else if (nlhs > 1) { mexErrMsgIdAndTxt( "MATLAB:yprime:maxlhs", "Too many output arguments."); } /* Check the dimensions of Y. Y can be 4 X 1 or 1 X 4. */ m = mxGetM(Y_IN); n = mxGetN(Y_IN); if (!mxIsDouble(Y_IN) || mxIsComplex(Y_IN) || (MAX(m,n) != 4) || (MIN(m,n) != 1)) { mexErrMsgIdAndTxt( "MATLAB:yprime:invalidY", "YPRIME requires that Y be a 4 x 1 vector."); } /* Create a matrix for the return argument */ YP_OUT = mxCreateDoubleMatrix( (mwSize)m, (mwSize)n, mxREAL); /* Assign pointers to the various parameters */ yp = mxGetPr(YP_OUT); t = mxGetPr(T_IN); y = mxGetPr(Y_IN); /* Do the actual computations in a subroutine */ yprime(yp,t,y); return; }
相关文章推荐
- 20135321余佳源、20135323符运锦----实验一:开发环境的熟悉
- Java学习笔记之卡片式布局CardLayout
- 协同过滤算法
- Project configuration is not up-to-date with pom.xml错误解决方法 (
- java环境搭建
- BestCoder Round #63 (div.2) HDOJ5567 sequence1(暴力)
- svm学习
- stl函数
- Python 快速教程(Django03): 所谓伊人
- Eclipse导入第三方库的方法
- 操作系统概念(第六章) 进程同步(二)
- asp.net数据验证控件
- OpenGLES 3.0
- 为什么Java中1000==1000为false而100==100为true?
- SQLiteDatabase中query、insert、update、delete方法参数说明
- 使用最新版的eclipse配置sturts2的常见错误及解决方案
- 整理一下CoreGraphic和Quartz2D的知识(一)
- Python 快速教程(Django02):庄园疑云
- iPhone开发基础教程笔记(十二)--第十二章 使用Quartz和OpenGL绘图
- C语言指针的常见错误