3

我一直在尝试用我的 c++ 代码在 matlab 中制作一个 s-function 块。我正在使用以下 mexopts.bat 文件

@echo 关闭

设置 MATLAB=%MATLAB%

设置 PATH=%PATH%;c:\cygwin\bin

设置 MW_TARGET_ARCH=win64

设置编译器=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-function(我使用 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 示例中获取它们

4

1 回答 1

3

所有 S-Function 都需要定义以下预处理器符号。

MATLAB_MEX_FILE
S_FUNCTION_LEVEL=2
S_FUNCTION_NAME=<your-sfun-name>

使用指令将它们添加到COMPFLAGS批处理文件中。-D

于 2012-08-05T17:01:03.437 回答