大型C代码不能用MATLAB的mex编译

时间:2016-03-02 19:58:12

标签: c matlab mex

我的总体目标是在我的MATLAB代码中使用C模型。 C模型很大(十几个.c文件,都是从cModel.c运行的),可以成功编译然后在终端中运行

make cModel
cModel.x startingfile.inp

因为正常的C编译器正确构建了C模型。

然而,MATLAB的mex函数没有编译这个C代码。我是mex的新手,我正在试着去理解问题是什么。

我认为(并在stackoverflow上阅读一些类似的问题支持这一点)问题在于创建一个mexFunction。我目前的尝试是

/*function AA_mexWrapper.c*/
/*Include the MATLAB mex header*/
#include "mex.h"

/* The gateway function */
void mexFunction( )
{
/* Main() of the C Model*/
cModel(); /* cModel writes files.  We don't care about the nonexistant returned variables*/
}

这会产生错误(使用mex AA_mexWrapper cModel):

Error using mex
/Users/Filepath/ cModel.c:215:5: warning:
implicit declaration of function 'main' is invalid in C99 [-Wimplicit-    function-declaration]
main(int argc, char **argv);
^
/Users/Filepath/ cModel.c:215:10: error:
expected expression
main(int argc, char **argv);
     ^
1 warning and 1 error generated.

MATLAB在做什么以及如何解决?我真的需要它像对待普通的C编译器一样对待cModel.c。

PS。我不知道C代码中有什么(int argc,char ** argv)。它们是完全未定义的,可能它们来自包含模型的非默认参数的文件名的可选用户输入。

PPS。我需要在matlab中运行C模型,将其指向包含各种模型选项的文本文件。我希望MATLAB可以解决这个问题,但我开始怀疑......

1 个答案:

答案 0 :(得分:2)

你不能像函数一样调用可执行文件;可执行文件的名称不会像您想象的那样“导出”。

一个简单的解决方案怎么样?在MATLAB之外构建你的可执行文件并让MATLAB运行它;这是一段代码(假设cModel.x与调用它的脚本/函数位于同一文件夹中):

system('./cModel.x startingfile.inp');
相关问题