先简单的说说mcc、mbuild和mex到底怎么回事:
mcc将M文件转换成C/C++文件和相应的MEX包裹文件(需要Matlab编辑器),但在特定条件下可以自动调用mbuild或者mex
mex将C/C++文件(入口函数为mexfunction())编译成MEX(DLL)文件(需要C/C++编辑器)
mbuild将C/C++文件(入口函数为main())生成可独立运行的C应用程序(需要C/C++编辑器)
一 mcc命令
Matlab编译器使用mcc命令能将一个M文件翻译成C文件,同时生成一个相应的包裹文件,这个包裹文件包含了编译器产生的代码和它支持的可执行文件类型之间所需的接口。利用改包裹文件提供的接口,生成的C文件能用在任何编译器所支持的可执行文件类型(如MEX文件、EXE文件、DLL文件)中,这些C文件与最终生成的可执行文件是相互独立的。
Matlab编译器(Lcc)在特定的条件下能自动调用mex和mbuild函数,尤其是mcc –x/-m/-p时。
(1)创建MEX文件
>>mcc –x filename (注意这个命令在2008a中已经去掉了)将M文件filename.m翻译成C代码,并生成一个可被Matlab直接调用的C的MEX。
(2)创建simulink S函数
>>mcc –s filename
将M文件filename.m翻译成C代码,并生成一个相应的simulink S函数,该函数的输入输出变量的大小可动态改变。
(3)创建可独立执行的C程序
>>mcc –m filename
将M文件filename.m翻译成C代码,生成的可执行文件能独立于Matlab运行环境。
(4)创建可独立运行的C++程序
>>mcc –p filename
将M文件filename.m翻译成C++代码,生成的可执行文件能独立于Matlab运行环境。
(5)创建可独立运行的C图形库函数
>>mcc –B sgl filename
如果filename.m中包含了对Matlab图形处理函数的调用,上述命令,将filename转换成为C语言,并生成一个能独立于Matlab运行环境的可执行程序。
(6) 创建可独立运行的C++图形库函数
>>mcc –B sgl cpp filename
如果filename.m中包含了对Matlab图形处理函数的调用,上述命令,将filename转换成为C++语言,并生成一个能独立于Matlab运行环境的可执行程序。
(7)创建C函数库
>>mcc –m –W lib:libfoo –T link:libfoo.m
创建一个C函数库
二 mex命令
用户可以在Matlab中按简单的M文件语法规则设计出来完成特定计算的算法。然后用Matlab编译器调用mex命令创建C共享库函数(DLL)或C++静态函数库,最后将它们整合到C/C++应用程序中,编译完这些C/C++应用程序,就可以用这些算法来实现特定的计算功能。当然这过程中也隐藏了算法和加快了代码的执行效率。
由于MEX文件执行效率高,故如果有文件重名的话,Matlab将优先调用MEX文件,下面以一个例子说明:
function theimage=gasket(numpoits) theimage=zeros(1000); corners=[866 1;1 500;866 1000]; startpoit=[866 1]; therand=ceil(rand(numpoits,1)*3); for ii=1:numpoits startpoit=floor((corners(therand(ii),:)+startpoit)/2); theimage(startpoit(1),startpoit(2))=1; end imagesc(theimage) colormap([1 1 1;0 0 0]); axis equal tight
现在直接调用
>> tic ,gasket(5000000);toc Elapsed time is 7.240129 seconds.
接着把它编译成mex文件在调用试试
>>mcc -p tic gasket;tic ,gasket(5000000);toc Elapsed time is 1.23861 seconds.
三 mbuild命令
要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
虽然生成的可执行程序可以脱离Matlab环境运行,但是它需要Matlab C/C++数学库文件或者图形库文件的支持才能运行。但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调用,则不仅可以独立与Matlab环境,也不需要那两个库函数的支持。
对于如何在其他环境中运行那个生成的exe文件,大家看看这个帖子:http://www.matlabsky.com/thread-543-1-1.html
下面说说一些比较和区别:
1. MEX文件和EXE文件的差别
Mex文件与Matlab解释器在同一个过程空间运行,当用户调用一个MEX文件时Matlab解释器就会动态的连接到MEX文件。
可独立运行的C/C++应用程序(exe)可以独立于Matlab环境而运行,而MEX文件则不行,它需要Matlab的支持。还有EXE中可以调用MEX文件。
2.mex和mbuild编译的C/C++文件的差别
使用mbuild命令编译的C/C++源文件中,必须包含main()函数,它能独立于Matlab运行。而mex命令编译的C/C++源文件中不含main()函数,它是以mexfunction()函数作为入口的,编译后生成的是mex文件,被Matlab调用。
相关推荐
我安装了 Microsoft Visual Studio(MVS) 2008 和 Matlab R2007b,并尝试了来自 Matlab 的“mex -setup”命令。 但是我的 MVS 2008 没有被 Matlab 识别。 我调试了 mex.m 并找到了一种向 Matlab 显示 MVS 2008 的方法...
matlab中调用OpenGL的范例程序,在Matlab中通过mbuild -setup设置好VC编译器后,采用mex -O -v DrawGL02.cpp编译生成.mexw32文件,然后可直接在matlab中执行。(注意编译命令中的O为大写的字母o)
在matlab设置编译环境时,会出现mex和mbuild设置错误的情况,原因是matlab的设置是绑定了vs2005,2008,2010的默认目录,以及windows sdk的默认目录;但是从windows sdk7.0后,注册表给出的目录不是matlab要的目录(注意是...
或者vs版本不是2012,或者你的mt.exe目录不在Windows kits下,那么有可能需要修改附件里面的相关目录的设置(其实就是mbuild配置cl.exe和mt.exe的目录位置,以及mex配置的include和lib的所需目录),mbuild是编译exe的,...
如果是Matlab 2013b 32位版本的可以复制出matlab bin win64两个相关目录下(mexopts目录下的:msvc110opts stp msvc110opts bat msvc110engmatopts bat和mbuildopts目录下的:msvc110compp bat msvc110compp stp)这...
Visual Studio 2017/2015/2013 support for Matlab 2016b/2015ab/2013ab,解决matlab不识别visual studio因而mex -setup和mbuild -setup失败的问题
2 在matlab 里面运行 mbuild -setup, 然后选 y, 再选择2012的那个项目,再选y 3 这是应该成功了 4 mex -setup也是一样的. 有一个奇怪的情况,就是.stp文件必须直接修改,我在桌面修改,然后覆盖到matlab目录后,其实并...
阅读随附的自述文件并将脚本文件复制到正确的位置。 然后运行 墨西哥设置 和 Visual Studio 2013 将列在选项中。
使用方法, 1 把附件相关的4个文件添加到matlab/bin/win64下面的2个相关目录 2 在matlab 里面运行 mbuild -setup, 然后选 y, 再选择2012的那个项目,再选y 3 这是应该成功了 4 mex -setup也是一样的. 有一个奇怪的...
压缩包中包含64位MATLAB对VS2017的支持配置文件(xml文件),在MATLAB不识别VS2017的情况下使用。使用方法请在解压后查看:说明.txt 如果没有安装Product Server,可以忽略与其相关的步骤。
首先必须感谢wiills和feifeiyanfeifeia两位提供了修改matlab关联编译器的方法。他们的资源地址如下: ... 2)在matlab中运行mex -setup 或 mbuild -setup; 3)选择visual studio 2013那一项即可。
C/C++程序向Matlab 计算引擎传递命令和数据信息,并从Matlab 计算引擎接收数据信息。 Matlab提供了以下几个C语言计算引擎访问函数供用户使用:engOpen,engClose,engGetVariable,engPutVariable,...
然后修改文件中的myaddress中的1111为你的发送方邮箱,mypassword中1s1s1s修改为发送方邮箱的密码,to中的2222修改为接收方邮箱,然后保存,先试着在matlab的命令窗口输入sendemail命令运行一下(运行之前要保证电脑...
2 在matlab 里面运行 mbuild -setup, 然后选 y, 再选择2012的那个项目,再选y 3 这是应该成功了 4 mex -setup也是一样的. 有一个奇怪的情况,就是.stp文件必须直接修改,我在桌面修改,然后覆盖到matlab目录后,其实并...
在出现的编译器中,选择mex -setup C++ 然后在输入命令:mbuild –setup 同样选择mex -setup C++ -client MBUILD 2. 编写.m文件 如下函数时完成图像的分割功能,第一个参数是图像的文件名(路径)
首先要设置编译器:在命令行窗口输入mbuild -setup和mex -setup选择编译器,注意如果没有编译器的话要安装。我这里遇到的一个问题是提示mbuild未包含在你安装的产品中,这就比较尴尬了,说明matlab安装的时候没有...
C++调用Matlab的VS2010...提前书案MATLAB并进行了mbuild -setup的环境设置,在VS项目里设置自己的MATLAB的库目录和包含路径。 里面包含三个项目:二个基于C++调用MATLAB的DLL动态链接库,一个基于C++调用MATLAB的引擎。
下载options_win32.zip,用options_win32\bin\win32\mbuildopts下的三个bat文件,覆盖C:\Program Files\MATLAB\R2009a\bin\win32\...mbuild -setup命令 解决vs2008调用matlab的dll文件 报runtime error R6034的问题!
这些说明和设置文件可用于在 32 位或 64 位 Windows 操作系统上下载、安装和配置 Microsoft 免费的 Visual C++ 2008 Express 编译器和 MatLab,使用最新的 Microsoft Windows SDK for Windows Server 2008 和 .NET ...
mcc编译就是将一个独立的代码文件编译为独立可执行文件,例如.exe文件,这个文件的运行只需要MATLAB编译器即可,并且在不启动MATLAB的情况下即可直接执行用户编译程序。 采用mbuild进行编译语言设定,具体如下: