我是一个有经验的MATLAB用户,但对C和MEX文件完全陌生。我有一个用C写的复杂程序,我需要在MATLAB中调用它。该程序由文件夹中的几十个文件组成,其中包括一个名为main.c的文件,它处理来自命令行的输入,并将结果传递给执行实际计算的其他类。
通常,要从命令行安装此程序,我会在UNIX命令提示符下运行./configure,make。然后,要运行程序,./runMyProgram -f input_file.txt -p some_parameters。该程序接受由数字列表组成的文本文件作为输入,并在命令窗口中打印结果表。我想向程序提供一个MATLAB数组(而不是.txt文件),并返回一个数组(而不是打印的结果表)。
我已经阅读了Mathworks的MEX文档(我发现它相当不透明),以及其他一些“教程”,但我完全迷惑了-这些示例是针对非常简单的单文件C程序的,并没有真正讨论如何处理更大更复杂的程序。将main.c文件替换为执行相同操作的MEX文件是否足够?另外,我如何在MATLAB中编译整个包?
我将非常感谢任何关于从哪里开始的简单的英语建议,或者是任何以一种容易理解的方式处理这个主题的教程的指针。
发布于 2013-05-23 21:11:47
是。通常,用MEX文件替换main.c文件是一个过程。在您的例子中,因为您已经有了复杂的构建设置,所以构建一个库,然后构建一个单独的mex文件,它只链接到这个库,可能会更容易。这比使用mex命令构建整个代码要容易得多。如果从库中导出需要调用的函数,则可以从mexFunction中调用它。mexFunction可以完成mxArrays的所有创建和读取工作。一个简单的样本mexFunction可以是,
#include "mex.h"
// Include headers for your library
void
mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
void* x = mxGetData(prhs[0]); // Assume one input. Check nrhs
plhs[0] = mxCreateDoubleMatrix(10,10,mxREAL); // Create 10x10 double matrix for output
void* y = mxGetData(plhs[0]);
yourLibraryFunction(x, y); // Read from x and write to y. Pass sizes in if needed
}https://stackoverflow.com/questions/15883018
复制相似问题