【问题标题】:compiling s-functions for matlab为matlab编译s函数
【发布时间】:2012-08-05 16:13:53
【问题描述】:

我一直在尝试用我的 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 示例中获取它们

【问题讨论】:

    标签: c++ matlab


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的快速回复。您能再解释一下吗。每次编译s函数时我都必须更改mexopts.bat文件吗?
    • 不,您不需要每次都更改文件。有关如何在调用mex 时设置您自己的选项的说明,请参阅Override Option Details 部分。您可以创建一个 m 文件函数,将正确的参数与您的 S-Function 名称一起传递给 mex,以简化该过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多