我是靠谱客的博主 细腻毛衣,最近开发中收集的这篇文章主要介绍在matlab中xt( ),编译matlab的s函数(compiling s-functions for matlab),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

编译matlab的s函数(compiling s-functions for matlab)

我一直在尝试使用我的c ++代码在matlab中创建一个s函数块。我正在使用以下mexopts.bat文件

@echo关闭

设置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 FilesMATLABR2012asimulinkinclude/simstruc.h:357:3: error: #error Must define one of RT, NRT, MATLAB_MEX_FILE, SL_INTERNAL, or FIPXT_SHARED_MODULE

C:Program FilesMATLABR2012asimulinkinclude/simstruc.h:467:78: fatal error: rt_matrx.h: No such file or directory

compilation terminated.

我确信c ++文件是正确的,因为我从matlab示例中获取它们

I have been trying to make an s-function block in matlab with my c++ codes.I am using the following mexopts.bat file

@echo off

set MATLAB=%MATLAB%

set PATH=%PATH%;c:cygwinbin

set MW_TARGET_ARCH=win64

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

set COMPFLAGS=-c -fexceptions "-I%MATLAB%externinclude"

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%binwin64"

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

I am able to successfully compile sample mexfunction file from matlab using the 'mex' function,But when i try compiling an s-function(i took the example files with matlab) i get the following errror

C:Program FilesMATLABR2012asimulinkinclude/simstruc.h:357:3: error: #error Must define one of RT, NRT, MATLAB_MEX_FILE, SL_INTERNAL, or FIPXT_SHARED_MODULE

C:Program FilesMATLABR2012asimulinkinclude/simstruc.h:467:78: fatal error: rt_matrx.h: No such file or directory

compilation terminated.

I am sure the c++ files are correct ,coz i took them from matlab examples

原文:https://stackoverflow.com/questions/11817974

更新时间:2020-01-20 20:29

相关问答

在搜索互联网并在此论坛上等待答案后没有结果,我的问题的解决方案最终升级到MATLAB 2013a。 此外,还需要对mexopts.sh文件进行一些修改。 只需将10.7所有实例替换为10.8或10.9 。 这两个都适合我,但我最终用10.9替换它,因为我正在运行小牛队。 可在此站点上找到“官方”解决方案。 After searching the internet and waiting for answers on this forum with no results, the solution

...

MATLAB编译器加密和归档您的MATLAB代码(它仍然是MATLAB .m代码),并将其打包成一个薄的可执行文件(.exe或.dll)包装器。 这与MATLAB编译器运行时(MCR)一起发送给最终用户。 如果你愿意,MCR也可以打包在可执行文件中。 MCR可以自由重新分发,您可以将其视为基本上没有前端桌面的MATLAB的副本。 当用户运行可执行文件时,它将对MATLAB代码进行解压缩和解密,并对MCR而不是MATLAB进行运行。 因此,通过这种方法提供的应用程序的运行方式与MATLAB中的运行方

...

如果标准库中没有round()函数,则可以在处理浮点数时任意评估每个值,分析要舍入的位置之后的地方的数字,检查是否它大于,等于或小于5; 然后,如果该值小于5,那么您可以floor()最终查看的数字。 如果您四舍五入后的数字的值为5或更大,您可以继续使功能floor()被评估的数字,然后加1。 对于与此相关的任何无效性,我表示歉意。 If there isn't a round() function in the standard library, you could, if dealing wi

...

你可以做一些像mean(x(~isnan(x))) 。 如果你想要,你也可以写一堆这样的包装,并将它们放在你的startup.m文件中。 You could do something like mean(x(~isnan(x))). If you want you could also write a bunch of wrappers like this and put them in your startup.m file.

假设你的主要约束是你没有在目标机器上安装MATLAB,我相信这是要走的路: 而不是编译matlab代码,生成C代码。 然后可以在您喜欢的任何系统上编译此代码,而无需matlab。 这是在Matlab Central上提出的。 Assuming that your main constraint is that you don't have MATLAB installed on the target machine, I believe this is the way to go: Rather

...

从'inside'函数调用的mfilename返回函数路径和名称。 fullPath = mfilename('fullpath');

pathString = fileparts(fullPath);

dataPath = [ pathString filesep 'data.csv'];

csvwrite(dataPath, data(:));

mfilename called from 'inside' a function returns the function path and na

...

所有S函数都需要定义以下预处理器符号。 MATLAB_MEX_FILE

S_FUNCTION_LEVEL=2

S_FUNCTION_NAME=

使用-D指令将这些添加到批处理文件中的COMPFLAGS 。 All S-Functions require the following preprocessor symbols to be defined. MATLAB_MEX_FILE

S_FUNCTION_LEVEL=2

S_FUNCTION_NAME=

...

如果你想用不同数量的输入参数定义两个同名的函数,你应该在同一个函数文件中定义它们,并使用varargin/nargin来处理这两种情况: function out=Kn(varargin)

if nargin==1

a=varargin{1};

%

%here do what Kn(a) does

%

%out=...

elseif nargin==2

a=varargin{1};

b=varargin{2};

%

%here do what Kn(a,b)

...

MATLAB和Excel以不同顺序具有besseli函数的参数。 以下表达式(注意已更改参数的顺序): 0.32*besseli(0, 0.32)/2/besseli(1, 0.32)

会产生: > ans = 1.0127

在MATLAB中。 MATLAB and Excel have the arguments of the besseli function in a different order. The following expression (note the order of

...

我认为你的意思是“Get()”不会从生成的代码中调用。 您的tlc文件在您链接的github存储库中没有正确的行结尾。 解决之后,生成的代码中会出现对Get()的调用。 修复此问题可能是特定于平台的。 如果您在平台中的简单代码编辑器中打开tlc文件,您应该能够在正确的位置看到新行。 如果您看到^ M等字符,则需要用新行替换它。 I think you meant "Get()" is not called from the generated code. Your tlc file does no

...

最后

以上就是细腻毛衣为你收集整理的在matlab中xt( ),编译matlab的s函数(compiling s-functions for matlab)的全部内容,希望文章能够帮你解决在matlab中xt( ),编译matlab的s函数(compiling s-functions for matlab)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部