我是一位经验丰富的MATLAB用户,但对C和MEX文件完全陌生。我有一个用C语言编写的复杂程序,我需要在MATLAB中调用它。该程序由一个文件夹中的几十个文件组成,其中一个名为main.c,它处理来自命令行的输入,将结果传递给进行实际计算的其他类。
通常,要从命令行安装此程序,我将在UNIX命令提示符下运行./configure,make。然后,要运行该程序,。/ runMyProgram -f input_file.txt -p some_parameters。该程序将一个由数字列表组成的文本文件作为输入,并在命令窗口中打印一个结果表。我想为程序提供MATLAB数组(而不是.txt文件)并返回一个数组(而不是打印的结果表)。
我已经阅读过The Mathworks的MEX文档(我发现它非常不透明),以及其他一些“教程”,但我完全迷失了 - 这些示例适用于非常简单的单文件C程序而且不是我真的讨论如何处理更大更复杂的程序。是否足以用执行相同操作的MEX文件替换main.c文件?另外,如何在MATLAB中编译整个包?
我会很感激任何关于从哪里开始的简单英语建议,或指向以易于理解的方式处理该主题的任何教程。
答案 0 :(得分:2)
是。通常用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
}