我的总体目标是在我的MATLAB代码中使用C模型。C模型很大(十几个.c文件都是从cModel.c运行的),可以通过以下方式成功编译并在终端中运行
make cModel
cModel.x startingfile.inp因为C模型是为普通C编译器正确构建的。
然而,MATLAB的mex函数并没有编译这个C代码。我是梅克斯公司的新手,我正在努力弄清楚问题出在哪里。
我认为(并且阅读了一些类似的关于堆栈溢出的问题也支持了这一点),问题在于创建一个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代码中有什么(,char **argv)。它们是完全未定义的,它们可能来自包含模型非默认参数的文件名的可选用户输入。
PPS。我需要在matlab中运行C模型,将它指向包含各种模型选项的文本文件。我希望MATLAB能处理这件事,但我开始怀疑.
发布于 2016-03-02 22:07:59
您不能像调用函数一样调用可执行文件;可执行文件的名称不会像您想的那样“导出”。
一个简单的解决方案怎么样?在MATLAB之外构建可执行文件,并要求MATLAB运行它;下面是一段代码(假设cModel.x与调用它的脚本/函数位于同一个文件夹中):
system('./cModel.x startingfile.inp');https://stackoverflow.com/questions/35756908
复制相似问题