概述
编译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)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复