我一直在尝试使用我的c ++代码在matlab中创建一个s-function块。我正在使用以下mexopts.bat文件
@echo off
设置MATLAB =%MATLAB%
设置PATH =%PATH%; c:\ cygwin \ bin
设置MW_TARGET_ARCH = win64
设置COMPILER = x86_64-w64-mingw32-g ++
设置COMPFLAGS = -c -fexceptions“-I%MATLAB%\ extern \ include”
设置OPTIMFLAGS = -O3
设置DEBUGFLAGS = -g -Wall
设置NAME_OBJECT = -o
设置PRELINK_CMDS1 = echo EXPORTS> mex.def& echo mexFunction>> mex.def
设置LIBLOC =“%MATLAB%\ bin \ win64”
设置LINKER = x86_64-w64-mingw32-g ++
设置LINKFLAGS = -static-libgcc -shared mex.def -L%LIBLOC% -static-的libstdc ++
设置LINKFLAGSPOST = -lmex -lmx -lmwlapack -lmwblas -lstdc ++
设置LINKOPTIMFLAGS = -O3
设置LINKDEBUGFLAGS = -g -Wall
设置LINK_FILE =
设置LINK_LIB =
设置NAME_OUTPUT = -o“%OUTDIR %% MEX_NAME %% MEX_EXT%”
设置RSP_FILE_INDICATOR =
设置POSTLINK_CMDS1 = del mex.def
我能够使用'mex'函数从matlab成功编译样本mexfunction文件,但是当我尝试编译s函数时(我用matlab获取了示例文件)我得到以下错误
C:\Program Files\MATLAB\R2012a\simulink\include/simstruc.h:357:3: error: #error Must define one of RT, NRT, MATLAB_MEX_FILE, SL_INTERNAL, or FIPXT_SHARED_MODULE
C:\Program Files\MATLAB\R2012a\simulink\include/simstruc.h:467:78: fatal error: rt_matrx.h: No such file or directory
compilation terminated.
我确信c ++文件是正确的,因为我从matlab示例中获取它们
答案 0 :(得分:3)
所有S函数都需要定义以下预处理程序符号。
MATLAB_MEX_FILE
S_FUNCTION_LEVEL=2
S_FUNCTION_NAME=<your-sfun-name>
使用COMPFLAGS
指令将这些内容添加到批处理文件中的-D
。