关于MEX函数的说明

Posted limanjihe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于MEX函数的说明相关的知识,希望对你有一定的参考价值。

 

reference:http://www.mathworks.com/help/matlab/ref/mex.html

.MEX文件是一种可在matlab环境中调用的C(或fortran)语言衍生程序,MEX文件的后缀名按32位/64位分别为 .mexw32/.mexw64。MEX文件是由C或Fortran语言编写的源代码,经matlab编译器处理而生成的二进制文件。它是可以被matlab解释器自动装载并执行的动态链接程序,类似windows下的dll文件。
MEX文件实现了一种其它语言与MATLAB的接口,通过MEX文件可以在MATLAB中像调用内嵌函数一样调用使用C语言Fortran等语言编写的函数,实现了代码重用,同时也能提高MATLAB环境中数据处理的效率
 

MEX文件是一种计算机文件,它提供MATLAB或Octave之间的接口以及用C,C ++或Fortran编写的函数。 它代表“MATLAB可执行文件”。

编译时,MEX文件是动态加载的,允许从MATLAB或Octave中调用外部函数,就像它们是内置函数一样。

为了支持MEX文件的开发,MATLAB和Octave都提供了外部接口功能,便于在MEX文件和工作区之间传输数据。 除了MEX文件之外,Octave还有自己的格式,使用自己的原生API,性能更好。

#include "mex.h"
void timestwo_alt(double *y, double x)
{    
    *y = 2.0*x;
}
 
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{    
    double *M;
    int m,n;    //指针指向第一个参数的数据地址
    M = mxGetPr(prhs[0]);
    m = mxGetM(prhs[0]);
    n = mxGetN(prhs[0]);
     
    plhs[0] = mxCreateDoubleMatrix(m,n, mxINT32_CLASS,mxREAL); //生成m x n 的实矩阵,分配内存空间
    double *A;
    A = mxGetPr(plhs[0]);
     
    timestwo_alt(A,*M);     //调用并直接赋值到指针指向的输出变量
}

 

编译链接C语言的MEX文件源程序,在MATLAB的控制窗口中输入:mex timestwoalt.c生成一个名为timestwoalt.mexw32的MEX文件;

运行:在MATLAB的控制窗口中输入
timestwoalt(10)
结果为
ans =
20.0000 + 0.0000i
MEX文件的编写和编译需要两个基本条件:一是必须按照MATLAB要求配置接口组件和相关工具,二是要有C语言或Fortran语言的编译器

在Windows下,使用MinGW-W64 Compiler对*.C进行编译。


 

说明:https://jingyan.baidu.com/album/656db918c1d832e381249c3e.html?picindex=1     

下载:https://osdn.net/projects/mingw/downloads/68260/mingw-get-setup.exe/

对比:MinGW vs. CygWin    https://www.cnblogs.com/findumars/p/8290405.html

以上是关于关于MEX函数的说明的主要内容,如果未能解决你的问题,请参考以下文章

SLIC超像素分割slicmex源代码在windows下matlab中mex出错的修正

SLIC超像素分割slicmex源代码在windows下matlab中mex出错的修正

如何正确传递输入并从 Mex 函数获取输出?

SG函数模板(转)

matlab中用于mex函数的安全、快速的CFLAGS

matlab多次调用mex函数后没有响应