A.2.1开始使用Mex文件

构建mex文件的基本命令是mkoctfile--mexmex。第一个命令可以在Octave中使用,也可以在命令行中使用。为了避免出现问题MATLAB自己的mex命令,命令的使用mex仅限于octave以内。编译的x文件具有扩展名.mex.

 
: mex [-options] file …
: status = mex (…)

将用C、C++或Fortran编写的源代码编译到MEX文件中。

status的返回状态mkoct文件作用

如果编译失败,并且没有指定输出参数,则会引发错误。如果程序员要求status然而,Octave只会报警告,程序员有责任验证命令是否成功。

这相当于mkoctfile--mex[-options]文件.

详见: mkoct文件, mexext.

 
: ext = mexext ()

返回用于MEX文件的文件扩展名。

编程说明:Octave使用扩展mex对于所有MEX文件,无论操作系统(Linux、Windows、Apple)或硬件的位宽(32位或64位)如何。

详见: mex.

考虑以下简短示例:

#include“mex.h”voidmexFunction(int nlhs,mxArray*plhs[],int nrhs,const mxArray*prhs[]){mexPrintf(“你好,世界!”);mexPrintef(“我有%d个输入和%d个输出”,nrhs,nlhs);/*为任何输出返回空矩阵*/int I;对于(I=0;I<nlhs;I++)plhs[I]=mxCreateDoubleMatrix(0,0,mxREAL);}

第一行#包括“mex.h使mex文件所需的所有定义都可用。Octave和之间的一个重要区别MATLAB是头文件吗matrix.h通过包含隐含地包含mex.h。这是避免与Octave文件发生冲突所必需的矩阵.h适用于不区分大小写文件名的操作系统和编译器。

mex文件的入口点从定义mexFunction。该函数有四个参数:

  1. 返回参数的数量(左侧参数的数量)。
  2. 返回参数的指针数组。
  3. 输入参数的数量(右侧参数的数量)。
  4. 指向输入参数的指针数组。

请注意,函数名称定义未明确包含在mexFunction所以只能有一个mexFunction每个文件的入口点。相反,在Octave中看到的函数名称是从mex文件本身的名称减去扩展名来确定的。如果上述函数在文件中myhello.c,可以使用进行编译

mkoctfile--mex myhello.c

它创建一个文件myhello.mex。然后,函数可以从Octave运行为

myhello(1,2,3)⇒ 你好,世界!⇒ 我有3个输入和0个输出

需要注意的是,mex文件不包含帮助字符串。要文档mex文件,应该在与mex文件本身相同的目录中存在一个m文件。以上面的例子为例,需要一个文件myhello.m其中可能包含文本

%MYHELLO对mex文件函数的简单测试。

在这种情况下,将在Octave中执行的函数将从mex文件提供,而帮助字符串将来自m文件。这对于允许在Octavelange中对mex文件进行示例实现以进行测试也很有用。

尽管在一个mex文件中不能有多个入口点,但可以使用mexFunctionName函数来确定调用mex文件的名称。这可以用于根据函数名更改mex文件的行为。例如,如果

#include“mex.h”voidmexFunction(int nlhs,mxArray*plhs[],int nrhs,const mxArray*prhs[]){const char*nm;nm=mexFunctionName();mexPrintf(“您调用的函数:%s\n”,nm);if(strcmp(nm,“myfunc”)==0

在文件中myfunc.c,与一起编译

mkoctfile--mex myfunc.cln-s myfunc.mex myfunc2.mex

那么可以看出

myfunc()⇒ 您调用了函数:myfunc这是主函数myfunc2()⇒ 您调用了函数:myfunc2

mex文件的行为可以根据函数的名称进行更改。

尽管用户应该只包括墨西哥在他们的代码中,Octavedeclare提供了额外的函数、typedef等,用户可以在头中写入mex文件mexproto.hmxarray.h.


版权所有 © 2024 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号