1

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

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

4

1 回答 1

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
}
于 2013-05-23T13:11:46.637 回答