Matlab Simulink编码器重新定义错误

时间:2014-04-03 09:54:53

标签: c matlab header-files simulink redefinition

我正在尝试将我在Simulink中设计的模型集成到我的S函数(C代码)中。为此,我使用Simulink Code生成(系统目标文件:err.tlc)来构建C代码。

我正在以这种看似过于复杂的方式进行这项工作,因为我的主要功能是实现一种进化算法,而这种Simulink模型就是如何评估每个人的。 (希望这很有意义)。

所以我刚刚生成了C代码,现在正尝试在这个S函数的c代码中实现它。 因为我相当新,所以使用生成的ert_main.c作为参考。

#include <stdio.h>                     /* This ert_main.c example uses printf/fflush */
#include "Peltier_model.h"             /* Model's header file */
#include "rtwtypes.h"
#include "builtin_typeid_types.h"
#include "multiword_types.h"
#include "rt_logging.h"
#define QUOTE1(name)                   #name
#define QUOTE(name)                    QUOTE1(name)              /* need to expand name */
#ifndef SAVEFILE
# define MATFILE2(file)                #file ".mat"
# define MATFILE1(file)                MATFILE2(file)
# define MATFILE                       MATFILE1(MODEL)
#else
# define MATFILE                       QUOTE(SAVEFILE)
#endif

这部分我复制到我自己的C代码的头文件中。 当我试图使用mex时,我首先遇到了无法找到rt_logging.h的问题,所以我在mex中包含了以下路径:

   mex -I/Applications/MATLAB_R2013b.app/rtw/c/src ....

那解决了这一部分。

现在的问题是我包含的Peltier_model.h(生成的代码)包含rt_logging.h,其中包含rt_mxclassid.h(所有这些都与Matlab和我没有触摸过),然后创建重新定义错误:< / p>

In file included from Peltier_model_ert_rtw/Peltier_model.h:28:
In file included from /Applications/MATLAB_R2013b.app/rtw/c/src/rt_logging.h:19:
/Applications/MATLAB_R2013b.app/rtw/c/src/rt_mxclassid.h:18:2: error: redefinition of     enumerator 'mxLOGICAL_CLASS'
    mxLOGICAL_CLASS,
    ^
/Applications/MATLAB_R2013b.app/extern/include/matrix.h:287:5: note: previous definition is here
mxLOGICAL_CLASS,
^

所以我对先前在matrix.h中定义的枚举的重新定义(来自rt_mxclassid.h中)有一个问题。

对于matrix.h的那部分中定义的其他枚举也是如此。

rt_classid.h:

/* $Revision: 1.1.6.1 $ */

#ifndef __rt_mxclassid_h__
#define __rt_mxclassid_h__

typedef enum {
mxUNKNOWN_CLASS = 0,
mxCELL_CLASS = 1,
mxSTRUCT_CLASS,
mxLOGICAL_CLASS,
mxCHAR_CLASS,
mxRESERVED5_CLASS, /* mxVOID_CLASS */
mxDOUBLE_CLASS,
mxSINGLE_CLASS,
mxINT8_CLASS,
mxUINT8_CLASS,
mxINT16_CLASS,
mxUINT16_CLASS,
mxINT32_CLASS,
mxUINT32_CLASS,
mxINT64_CLASS,      /* place holder - future enhancements */
mxUINT64_CLASS,     /* place holder - future enhancements */
mxRESERVED16_CLASS, /* mxFUNCTION_CLASS */
mxRESERVED17_CLASS, /* mxOPAQUE_CLASS */
mxOBJECT_CLASS
} mxClassID;

#endif /* __rt_mxclassid_h__ */

matrix.h的相关部分:

/**
 * Enumeration corresponding to all the valid mxArray types.
 */
typedef enum
{
mxUNKNOWN_CLASS = 0,
mxCELL_CLASS,
mxSTRUCT_CLASS,
mxLOGICAL_CLASS,
mxCHAR_CLASS,
mxVOID_CLASS,
mxDOUBLE_CLASS,
mxSINGLE_CLASS,
mxINT8_CLASS,
mxUINT8_CLASS,
mxINT16_CLASS,
mxUINT16_CLASS,
mxINT32_CLASS,
mxUINT32_CLASS,
mxINT64_CLASS,
mxUINT64_CLASS,
mxFUNCTION_CLASS,
mxOPAQUE_CLASS,
mxOBJECT_CLASS, /* keep the last real item in the list */
#if defined(_LP64) || defined(_WIN64)
mxINDEX_CLASS = mxUINT64_CLASS,
#else
mxINDEX_CLASS = mxUINT32_CLASS,
#endif
/* TEMPORARY AND NASTY HACK UNTIL mxSPARSE_CLASS IS COMPLETELY ELIMINATED */
mxSPARSE_CLASS = mxVOID_CLASS /* OBSOLETE! DO NOT USE */
}
mxClassID;

由于任何有问题的文件都是由我编写的,我很遗憾如何处理这个问题。非常感谢任何帮助!!

非常感谢!

0 个答案:

没有答案