构建mex文件的基本命令是mkoctfile--mex
或mex
。第一个命令可以在Octave中使用,也可以在命令行中使用。为了避免出现问题MATLAB自己的mex
命令,命令的使用mex
仅限于octave以内。编译的x文件具有扩展名.mex.
[-options] file …
¶status
=
mex (…)
¶将用C、C++或Fortran编写的源代码编译到MEX文件中。
status的返回状态mkoct文件
作用
如果编译失败,并且没有指定输出参数,则会引发错误。如果程序员要求status然而,Octave只会报警告,程序员有责任验证命令是否成功。
这相当于mkoctfile--mex[-options]文件
.
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
。该函数有四个参数:
请注意,函数名称定义未明确包含在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.h和mxarray.h.
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号