为Matlab编译S函数

3

我一直试图在Matlab中使用我的C++代码创建一个s-function块。我正在使用以下mexopts.bat文件:

@echo off

set MATLAB=%MATLAB%

set PATH=%PATH%;c:\cygwin\bin

set MW_TARGET_ARCH=win64

set COMPILER=x86_64-w64-mingw32-g++

set COMPFLAGS=-c -fexceptions "-I%MATLAB%\extern\include"

set OPTIMFLAGS=-O3

set DEBUGFLAGS=-g -Wall

set NAME_OBJECT=-o

set PRELINK_CMDS1=echo EXPORTS > mex.def & echo mexFunction >> mex.def

set LIBLOC="%MATLAB%\bin\win64"

set LINKER=x86_64-w64-mingw32-g++

set LINKFLAGS= -static-libgcc -shared mex.def -L%LIBLOC% -static-libstdc++

set LINKFLAGSPOST= -lmex -lmx -lmwlapack -lmwblas -lstdc++

set LINKOPTIMFLAGS=-O3

set LINKDEBUGFLAGS= -g -Wall

set LINK_FILE=

set LINK_LIB=

set NAME_OUTPUT=-o "%OUTDIR%%MEX_NAME%%MEX_EXT%"

set RSP_FILE_INDICATOR=

set 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示例中获取了它们。

1个回答

3
所有S函数都需要定义以下预处理器符号。
MATLAB_MEX_FILE
S_FUNCTION_LEVEL=2
S_FUNCTION_NAME=<your-sfun-name>

将这些添加到批处理文件中的COMPFLAGS中,使用-D指令。

谢谢您的快速回复。您能再解释一下吗?我每次编译S函数时都需要更改mexopts.bat文件吗? - feminkk
不,您不需要每次更改文件。请参考Override Option Details部分的说明,在调用mex时设置自己的选项。您可以创建一个m文件函数,将正确的参数传递给mex以及您的S-Function名称,以简化该过程。 - Praetorian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接