Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为C程序创建MATLAB MEX文件_C_Matlab_Mex - Fatal编程技术网

为C程序创建MATLAB MEX文件

为C程序创建MATLAB MEX文件,c,matlab,mex,C,Matlab,Mex,我是一个有经验的MATLAB用户,但对C和MEX文件完全陌生。我有一个用C编写的复杂程序,我需要从MATLAB中调用它。该程序由文件夹中的几十个文件组成,其中包括一个名为main.c的文件,该文件处理来自命令行的输入,并将结果传递给执行实际计算的其他类 通常,要从命令行安装此程序,我会在UNIX命令提示符下运行./configure,make。然后,要运行程序,./runMyProgram-f input_file.txt-p一些_参数。该程序将包含数字列表的文本文件作为输入,并在命令窗口中打印

我是一个有经验的MATLAB用户,但对C和MEX文件完全陌生。我有一个用C编写的复杂程序,我需要从MATLAB中调用它。该程序由文件夹中的几十个文件组成,其中包括一个名为main.c的文件,该文件处理来自命令行的输入,并将结果传递给执行实际计算的其他类

通常,要从命令行安装此程序,我会在UNIX命令提示符下运行./configure,make。然后,要运行程序,./runMyProgram-f input_file.txt-p一些_参数。该程序将包含数字列表的文本文件作为输入,并在命令窗口中打印结果表。我想给程序提供一个MATLAB数组(而不是.txt文件),然后返回一个数组(而不是打印的结果表)

我已经阅读了Mathworks的MEX文档(我发现它相当不透明),以及其他一些“教程”,但我完全迷路了——这些示例是针对非常简单的单文件C程序的,并没有真正讨论如何处理更大、更复杂的程序。用具有相同功能的MEX文件替换main.c文件是否足够?另外,如何在MATLAB中编译整个软件包


如果你能给我一些简单的英语建议,告诉我从哪里开始,或者给我一些能让我理解的教程,我将不胜感激

是的。通常,用MEX文件替换main.c文件是一个过程。在您的情况下,因为您已经有了复杂的构建设置,所以构建一个库,然后构建一个单独的mex文件(该文件仅链接到此库)可能会更容易。这将比使用mex命令构建整个过程容易得多。如果从库中导出需要调用的函数,则可以从MEX函数中调用它。mexFunction可以创建和读取MXArray。一个简单的示例MEX函数可以是

#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
}

看这里:。这在我刚开始的时候帮了我很大的忙。构建复杂的MEX文件是一件痛苦的事情。别指望这是一次美妙的经历。:)为什么不使用
system
或类似工具从MATLAB运行程序,然后解析输出?这样,您就不必编写任何C代码或弄乱程序的代码(如果程序由作者更新,您也不必再这样做)。@wakjah:没想到。。。好主意。虽然为了我自己的知识,我仍然想学习如何处理MEX文件:-)