为C程序创建MATLAB MEX文件

我是一位经验丰富的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中编译整个包?

我将非常感谢任何关于从哪里开始的简单英语建议,或指向以易于理解的方式处理该主题的任何教程。

是。 通常用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 }