我的总体目标是在我的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可以解决这个问题,但我开始怀疑......
答案 0 :(得分:2)
你不能像函数一样调用可执行文件;可执行文件的名称不会像您想象的那样“导出”。
一个简单的解决方案怎么样?在MATLAB之外构建你的可执行文件并让MATLAB运行它;这是一段代码(假设cModel.x
与调用它的脚本/函数位于同一文件夹中):
system('./cModel.x startingfile.inp');