2016-03-02 50 views
0

我的总体目标是在我的MATLAB代码中使用C模型。的C型是大(超过一打.c文件,它们是从cModel.c所有运行),并且可以成功编译然后在终端通过大型C代码没有用MATLAB的mex编译

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。我不知道什么(int argc,char ** argv)在C代码中。它们完全未定义,大概它们来自包含模型非默认参数的文件名的可选用户输入。

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

+2

使用正确的函数声明。你使用的是自1989年以来过时的。 – Olaf

+0

@Olaf - 我没有写C模型不幸。他们有什么问题? –

+2

如果您不打算将任何变量传入或传出来自MATLAB变量的mex函数,那么使用mex编译代码就没有意义了。只需使用“系统”以正常方式调用您的可执行文件即可。 – Peter

回答

2

您不能像调用函数一样调用可执行文件;可执行文件的名称未按照您的想法“导出”。

简单的解决方案如何?在MATLAB之外建立你的可执行文件并要求MATLAB运行它;这里有一段代码,将做到这一点(假设cModel.x是在同一个文件夹中的脚本/函数调用它):

system('./cModel.x startingfile.inp'); 
+0

完美。 我可以使用它来获得我需要的功能。感谢在我的方法中注意到这个问题 - 我不知道系统命令。 –