我一直试图在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示例中获取了它们。
mex
时设置自己的选项。您可以创建一个m文件函数,将正确的参数传递给mex
以及您的S-Function名称,以简化该过程。 - Praetorian