先简单的说说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:numpoitsstartpoit=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调用。

原文地址:http://blog.sina.com.cn/s/blog_5928f2dd0100gf27.html

matlab中 mcc、mbuild和mex命令详解相关推荐

  1. matlab中tr什么意思,tr命令详解

    tr是translate的简写,亦即翻译,但是遗憾的是,它不能翻译句子,只能翻译单个字符. 1 tr的工作原理是什么? 先记住一点,tr命令不接受指定的文件参数,而只是对标准输入进行翻译.好了,记住这 ...

  2. Matlab中plot函数及legend函数详解

    Matlab中plot函数及legend函数详解 Matlab中plot函数及legend函数详解 Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y) plot(X1,Y1 ...

  3. Matlab中自带地图绘制WorldMap详解

    Matlab中自带地图绘制WorldMap详解 转载地址:http://blog.csdn.net/archielau/article/details/7933265,其实这些代码是在matlab中的 ...

  4. Linux中sort,uniq,cut,wc命令详解

    Linux中sort,uniq,cut,wc命令详解 来源:hellodev 本文主要对Linux中sort,uniq,cut,wc这4个命令的使用方法进行了详细说明,希望对你有所帮助. sort s ...

  5. linux中date使用方法,linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例)...

    linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例) 发布于 2016-02-07 15:58:40 | 108 次阅读 | 评论: 0 | 来源: 网友投递 LinuxLinux是一 ...

  6. matlab中 mcc/mbuild/mex 区别

    mcc 的作用是将 .m文件编译为 c/c++动态链接库文件,使你可以在 c/c++程序中使用 matlab的一些函数功能.mcc 也可以将.m文件编译为exe可执行文件. mex 的作用是将 c/c ...

  7. cumsum在matlab中,matlab中cumsum函数和sum函数详解

    调用格式及说明 matlab中cumsum函数通常用于计算一个数组各行的累加值.在matlab的命令窗口中输入doc cumsum或者help cumsum即可获得该函数的帮助信息. 调用格式及说明 ...

  8. 矩阵在Matlab中应用规则,1.3 MATLAB中的矩阵运算免费阅读_详解MATLAB在最优化计算中的应用免费全文_百度阅读...

    4.6 线性规划问题的MATLAB求解方法 与一般的线性规划理论一样,在MATLAB中有线性规划的标准型,和前面介绍的一般标准型有类似之处,也有不同之处.在调用MATLAB线性规划函数linprog时 ...

  9. matlab stem函数坐标轴_在MATLAB中可以设置坐标轴的函数详解

    1.绘制二维曲线的最基本函数plot 2.双纵坐标函数plotyy 3. 坐标控制 函数的调用格式为: axis([xmin xmax ymin ymax zmin zmax]) axis函数功能丰富 ...

最新文章

  1. 3D原子映射有助于研究生命的起源
  2. 如何下载最新版的 Adobe Flash Player
  3. 思考题-算法小思考题
  4. 『JavaScript』核心
  5. php mysql删除失败_php mysql删除的代码哪里出错了?
  6. NVDLA软件架构和源码解析 第一章—内核驱动
  7. 95-110-026-源码-Env-RemoteStreamEnvironment
  8. 懂了这些,你才真正懂了C
  9. 【数据结构】堆、堆排序笔记
  10. Android 颜色渲染(三) Shader颜色渲染
  11. css3技巧——产品列表之鼠标滑过效果(一)
  12. IEC61850建模说明
  13. 计算机主板图解内存插槽,图解电脑主板上的常见部件 -电脑资料
  14. android lottie大小,android-Lottie动画填充
  15. LAMP一键安装包是什么?
  16. Windows 去除桌面烦人的小箭头
  17. 什么牌子的蓝牙耳机耐用?类似airpods pro的降噪耳机推荐
  18. python soup中文歌词_Python调用BeautifuSoup进行html的文本内容提取问题 [ 求问吃鸡主播beautifu1 boy...
  19. Android Studio 界面设计和运行的不一样
  20. 浙江临海一民警收到“红牌警告”:立即停止工作

热门文章

  1. HDU2000 ASCII码排序【字符排序】
  2. AOJ0118 Property Distribution【DFS】
  3. POJ3069 Saruman's Army【贪心】
  4. CCF NOI1058 统计单词
  5. B00011 unordered_map
  6. pandas 学习 ——Series
  7. 【证明】—— 二叉树的相关证明
  8. 【读书笔记】 —— 公平与正义
  9. python 删除set指定值_python中的变量和数据类型(三)
  10. python编程是干嘛的-学 Python 都用来干嘛的?