构建mex文件的基本命令是mkoctfile --mex或mex。第一个命令可以在Octave中使用,也可以在命令行中使用。为了避免出现问题MATLAB自己的mex命令,命令的使用mex仅限于octave以内。编译的x文件具有扩展名.mex.
ext = mexext () ¶返回用于MEX文件的文件扩展名。
编程说明:Octave使用扩展mex对于所有MEX文件,无论操作系统(Linux、Windows、Apple)或硬件的位宽(32位或64位)如何。
详见: mex.
考虑以下简短示例:
#include "mex.h"
void
mexFunction (int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
mexPrintf ("Hello, World!\n");
mexPrintf ("I have %d inputs and %d outputs\n", nrhs, nlhs);
/* Return empty matrices for any outputs */
int i;
for (i = 0; i < nlhs; i++)
plhs[i] = mxCreateDoubleMatrix (0, 0, mxREAL);
}
第一行#include "mex.h"使mex文件所需的所有定义都可用。Octave和之间的一个重要区别MATLAB是头文件吗"matrix.h"通过包含隐含地包含"mex.h"。这是避免与Octave文件发生冲突所必需的"Matrix.h"适用于不区分大小写文件名的操作系统和编译器。
mex文件的入口点从定义mexFunction。该函数有四个参数:
请注意,函数名称定义未明确包含在mexFunction所以只能有一个mexFunction每个文件的入口点。相反,在Octave中看到的函数名称是从mex文件本身的名称减去扩展名来确定的。如果上述函数在文件中myhello.c,可以使用进行编译
mkoctfile --mex myhello.c
它创建一个文件myhello.mex。然后,函数可以从Octave运行为
myhello (1,2,3) ⇒ Hello, World! ⇒ I have 3 inputs and 0 outputs
需要注意的是,mex文件不包含帮助字符串。要文档mex文件,应该在与mex文件本身相同的目录中存在一个m文件。以上面的例子为例,需要一个文件myhello.m其中可能包含文本
%MYHELLO Simple test of the functionality of a mex-file.
在这种情况下,将在Octave中执行的函数将从mex文件提供,而帮助字符串将来自m文件。这对于允许在Octavelange中对mex文件进行示例实现以进行测试也很有用。
尽管在一个mex文件中不能有多个入口点,但可以使用mexFunctionName函数来确定调用mex文件的名称。这可以用于根据函数名更改mex文件的行为。例如,如果
#include "mex.h"
void
mexFunction (int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
const char *nm;
nm = mexFunctionName ();
mexPrintf ("You called function: %s\n", nm);
if (strcmp (nm, "myfunc") == 0)
mexPrintf ("This is the principal function\n", nm);
return;
}
在文件中myfunc.c,与一起编译
mkoctfile --mex myfunc.c ln -s myfunc.mex myfunc2.mex
那么可以看出
myfunc ()
⇒ You called function: myfunc
This is the principal function
myfunc2 ()
⇒ You called function: myfunc2
mex文件的行为可以根据函数的名称进行更改。
尽管用户应该只包括墨西哥在他们的代码中,Octavedeclare提供了额外的函数、typedef等,用户可以在头中写入mex文件mexproto.h和mxarray.h.
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2