`

matlab中 mcc、mbuild和mex命令详解

 
阅读更多

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

 

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

分享到:
评论

相关推荐

    生物数学matlab中mcc和mex等编译命令.pdf

    在MATLAB中,`mcc`、`mbuild`和`mex`是三个用于编译和创建可执行文件的重要命令,它们分别适用于不同的场景。 1. `mcc`命令: `mcc`是MATLAB Compiler的命令行工具,它能够将MATLAB的.m文件转换为C/C++源代码以及...

    生物数学matlab中mcc和mex等编译命令.docx

    在MATLAB环境中,`mcc`、`mbuild`和`mex`是三个非常重要的编译命令,它们主要用于创建可执行文件、MEX函数以及与MATLAB交互的C/C++代码。这些命令使得MATLAB代码能够脱离MATLAB环境独立运行,或者与非MATLAB系统集成...

    Matlab中Mex文件的创建和使用方法PPT教案学习.pptx

    Matlab 中 Mex 文件的创建和使用方法是 Matlab 编程中的一项重要技术, Mex 文件是 Matlab 编译器(The MATLAB Compiler, MCC)将 M 文件转化为 C 或 C++ 源代码,然后进一步编译链接成 Mex 文件或可执行程序或共享...

    Matlab中Mex文件的创建和使用方法汇总PPT教案学习.pptx

    在MATLAB环境中,Mex文件是一种混合编程的工具,它允许MATLAB代码与C或C++代码相互交互,从而实现高效计算和性能优化。Mex文件的创建和使用是提高MATLAB程序运行速度的关键步骤,尤其对于那些需要处理大量数据或者...

    VS2010与Matlab 2014a混合编程

    按照默认选项安装完成后,应该再次运行Matlab中的mex命令,进行编译器和语言的选择配置。 安装mex之后,还需要安装Matlab的mbuild工具,该工具支持编译和链接Matlab生成的代码。安装并配置mbuild时,同样需要选择...

    【精品】在MATLAB命令行中使用mcc命令将messay.m翻译为C代码..doc

    在MATLAB命令行中运行`mex -setup`和`mbuild -setup`,选择对应的C/C++编译器。 2. **M文件转C代码**:使用`mcc`命令,如`mcc -m messay.m`,将`messay.m`转换为C代码。这会在同一目录下生成`messay.h`、`messay.c`...

    matlab转C++.pdf

    - 文档中的步骤涉及到使用mcc命令进行编译器设置,并通过mbuild来构建独立的应用程序。这些命令是MATLAB产品提供的工具链的一部分,可以简化MATLAB到C++的转换过程。 4. MATLAB Add-in for Microsoft Visual C++:...

    matlab与vc混合编程

    mex命令主要用于构建MATLAB与外部接口(MEX)文件,这些文件可以在MATLAB中直接调用C/C++代码。 ##### 3.2 mbuild命令设置 1. **启动MATLAB**并在命令行输入`mbuild-setup`,启动应用程序编译器设置向导。 2. **...

    将Matlab7.0函数转换成VC++6.0动态链接库

    转换过程可以通过在Matlab命令行中输入特定的MCC命令来完成,例如: ``` mcc -Wlib:libsum_prod -Tlink:libsum_prod.m ``` 或者使用更复杂的配置选项,如`-Wcpplib`等。 ### 五、在VC++中使用DLL 一旦DLL生成完成...

    matlab教程

    MATLAB提供了一种称为混合编程的能力,允许用户通过mex和mbuild命令将MATLAB代码与C/C++代码相互调用。 1. **mcc4.0编译环境设置**:首先,你需要确保MATLAB的编译环境已经正确配置。这包括添加MATLAB的安装路径到...

    VC中调用matlab配置方法.doc

    在VC中调用MATLAB有多种方式,主要包括MATLAB引擎模式、MCC编译工具和MEX工具等。 1. **MATLAB引擎(ENGINE)模式**: - **原理**:采用客户机/服务器(CLIENT/SERVER)的计算形式。 - **实现**:通过MATLAB应用程序...

    vc与matlab混合编程

    在MATLAB的Command Window中执行`mbuild -setup`命令,选择对应的编译器,此处选择Microsoft Visual C++ 6.0。按照提示确认设置,更新编译选项文件`compopts.bat`。 2. **MEX编译环境设置**: 接下来,运行`mex -...

    由MATLAB的m文件生成动态链接库的方法说明.doc.docx

    首先,需要在 MATLAB 命令提示符中输入命令:mex-setup,选择 VC6.0 作为编译环境。然后,输入命令:mbuild-setup,选择 VC6.0 作为编译环境。这样就可以将 MATLAB 代码编译成 C 代码。 三、使用 MATLAB Project ...

    matlab生成exe应用程序.pdf

    在 Matlab 命令行输入 mbuild –setup 和 mex –setup,选择安装的 C 编译器。 3. 调用编译器 可以使用 Deploy Tool 或 MCC 命令行参数来编译 Matlab 程序。在命令窗口输入 deploytool 即可看到 Deploy Tool 的 ...

    MATLAB与VC混合编程.pdf

    1. **环境设置**:在MATLAB环境中,运行mex -setup和mbuild -setup命令,选择合适的编译器类型和位置。 2. **编译**:使用MATLAB的mcc编译器命令,如`mcc -t -LC -W lib:test.dll -Tlink:lib test.m`,将.m文件转换...

    matlab7.0与VC接口编程.doc

    - MATLAB 7.0提供了两个重要的命令来设置编译器:`mex -setup`和`mbuild -setup`。 - `mex -setup`主要用于构建MEX文件,即在MATLAB中调用外部C/C++代码; - `mbuild -setup`则用于构建独立的MATLAB应用程序,...

    Matlab的M文件生成动态链接库DLL.doc

    - 同样地,在Matlab命令窗口中输入`mbuild -setup`,进行编译器的选择和确认。 3. **编写Matlab函数**: - 创建一个名为`sum_prod.m`的M文件,实现两个矩阵的加法和点乘功能。 - 示例代码: ```matlab ...

Global site tag (gtag.js) - Google Analytics