Mex文件及其编译
来源:互联网 发布:js正则表达式判断密码 编辑:程序博客网 时间:2024/04/27 18:03
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的函数,前面都是对输入参数处理:
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; }
0 0
- Mex文件及其编译
- 基于OpenCV的mex文件及其编译
- 编译MEX文件
- Matlab 编译MEX文件
- Matlab编译mex文件:
- MEX文件编译
- Matlab如何编译mex文件
- mex 编译 c 文件报错
- MATLAB 编译MEX文件的方法
- matlab用mex编译cpp文件
- MATLAB编译C++问题(MEX文件)
- MEX文件
- Mex 文件
- 用c /c++编写mex 程序并编译MATLAB的Mex文件的方法
- VC2008编译MATLAB的Mex文件的方法
- matlab 编译 mex 含有OPenCv函数的Cpp文件
- matlab采用mex编译多个cpp文件
- win7 64位系统下matlab中mex文件编译
- linux虚拟机网卡启动失败问题处理
- 进程和线程
- IDEA14 创建项目集锦
- cocos2dx 定时器使用 schedule,scheduleUpdate,scheduleOnce
- 89.Oracle数据库SQL开发之 修改表内存——数据库事务的保存点
- Mex文件及其编译
- 基于nodejs+socket.io的chatrobot
- Linux常用环境安装步骤
- 90.Oracle数据库SQL开发之 修改表内存——数据库事务的ACID特性
- 如何在Cocos2D游戏中实现A*寻路算法(二)
- 如何得到linux的pagesize
- 九度oj-1517-链表中倒数第k个结点
- 图——图的遍历—— 广度优先遍历BFS
- 【JavaScript】正则表达式 VS 正规式