首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为C程序创建一个MATLAB MEX文件

为C程序创建一个MATLAB MEX文件
EN

Stack Overflow用户
提问于 2013-04-08 23:23:48
回答 1查看 1.1K关注 0票数 1

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

我将非常感谢任何关于从哪里开始的简单的英语建议,或者是任何以一种容易理解的方式处理这个主题的教程的指针。

EN

回答 1

Stack Overflow用户

发布于 2013-05-23 21:11:47

是。通常,用MEX文件替换main.c文件是一个过程。在您的例子中,因为您已经有了复杂的构建设置,所以构建一个库,然后构建一个单独的mex文件,它只链接到这个库,可能会更容易。这比使用mex命令构建整个代码要容易得多。如果从库中导出需要调用的函数,则可以从mexFunction中调用它。mexFunction可以完成mxArrays的所有创建和读取工作。一个简单的样本mexFunction可以是,

代码语言:javascript
复制
#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
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15883018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档