第19章MATLAB710编译器.ppt
第19章 MATLAB 7.0编译器,MATLAB为用户提供了简单、明快的语法,功能强大的内置函数,丰富多样的工具箱,可以满足各专业领域的需要。利用MATLAB,用户只需很少的代码就能实现一些复杂的功能。用户也许希望自己编写的程序脱离MATLAB环境独立运行,或嵌入到其他开发环境(如VS)中的工程中,或嵌入到PPT中加以展示,这正是MATLAB编译器所要完成的工作之一。基于程序执行效率的考虑,也是使用MATLAB编译器的一个主要原因。我们知道MATLAB程序语言是一种边解释边执行的程序语言,其执行效率远低于二进制代码。通过MATLAB编译器,用户可以将MATLAB程序转换成二进制代码形式存在的可执行程序,如独立MATLAB环境的可执行程序、函数库(DLL)或组件(COM、ActiveX等)等,从而大大提升执行效率。,19.1 MATLAB编译器简介,MATLAB Compiler是MATLAB应用程序集成与发布的一种重要工具。MATLAB Compiler能够将MATLAB的M函数文件转换成独立可执行的应用程序、可发布的应用程序函数库(DLL)或组件(如COM、ActiveX等),这些应用程序组件能够脱离MATLAB环境在不同的平台上应用。特别是在最新版的MATLAB7.0中,MATLAB Compiler的功能得到很大的提升和扩展,几乎可以编译所有的工具箱函数。本节首先简要介绍MATLAB Compiler 4的工作原理和过程,并讨论MATLAB Compiler 4与早期版本MATLAB Compiler的差别;第19.1.2节列出了MATLAB Compiler 4的主要功能和缺陷;第19.1.3节介绍了脚本文件与函数文件的转换。,19.1.1 MATLAB Compiler 4,MATLAB Compiler 4是在第三方C/C+编译器的支持下,将MATLAB的M函数文件转换为可独立执行的应用程序、函数库或组件的应用程序发布工具。MATLAB Compiler 4与早期版本的MATLAB Compiler有所不同,早期的MATLAB Compiler只是将M函数文件转变成标准C/C+源代码,然后由第三方C/C+编译器将其编译成独立可执行的应用程序、函数库或组件等。MATLAB Compiler 4由三个组件构成,即MATLAB Compiler、MATLAB Component Runtime(MCR)和Component Technology File(CTF)。其中MATLAB Compiler组件是MATLAB Compiler 4提供给用户用于应用程序发布的界面,是包含若干交互式命令和命令行开关选项的工具命令行。,19.1.2 MATLAB Compiler 4的功能和局限性,MATLAB Compiler 4比起早期版本的MATLAB 编译器性能有很大的提升,这主要体现在对MATLAB各项功能的支持上有很大扩展,特别是对工具箱函数的支持。下面列出了MATLAB Compiler 4的几个应用:独立可执行应用程序:不需要MATLAB 7.0软件环境的支持,可以在没有安装MATLAB的计算机上运行;C与C+共享库(在Windows操作系统中为动态连接库DLL);Excel附件:需要MATLAB 7.0 Builder;COM附件:需要MATLAB 7.0 Builder。,19.1.3 脚本文件与函数文件的转换,针对MATLAB Compiler不能处理脚本文件的问题,用户可以事先将脚本文件转换为M函数文件,然后利用编译器编译该M函数文件。熟悉M程序设计(参考本书第15章)的用户应当知道脚本文件与函数文件的转换是十分容易的,只需在脚本文件的开头添加一行函数声明即可。下面仅通过一个简单的示例说明如何使用编译器编译脚本文件。,19.2 编译器的安装和设置,在使用MATLAB Compiler之前用户需要正确地安装MATLAB、MATLAB Compiler及一个MATLAB Compiler支持的第三方C/C+编译器,而且需要对MATLAB Compiler进行合理的配置。本节首先介绍编译器的安装和配置,最后介绍MCR的安装,这是MATLAB外部应用程序运行必需的环境支持。,19.2.1 安装编译器,MATLAB Compiler 4至少需要MATLAB 7.0的支持,在MATLAB安装过程中要确保“MATLAB Compiler”被选中(默认情况)。MATLAB对第三方C/C+编译器的支持是比较广泛的,下面列出了Windows平台下MATLAB Compiler 4支持的常用第三方C/C+编译器。Lcc C:MATLAB 7.0自带的编译器,仅能够编译C代码,不能编译C+代码。Borland C+:适用版本为5.3、5.4、5.5和5.6。Microsoft Visual C/C+(MSVC):适用版本为6.0、7.0和7.1。用户可以通过在命令窗口输入指令mbuild setup查看编译器支持的第三方C/C+编译器,详细内容参考第19.2.2节的编译器设置。,19.2.2 设置编译器,完成编译器的安装工作之后,还不能正常地使用编译器进行应用程序发布,用户需要对编译器进行相关的设置。编译器的设置在第一次使用MATLAB编译器或修改编译器安装路径后进行。另外如果用户需要选择其他的第三方C/C+编译器,也需要重新设置MATLAB编译器。完成编译器设置之后,用户就可以直接使用选定的第三方C/C+编译器完成应用程序的发布工作。用户可以在操作系统或MATLAB的命令窗口中利用如下指令:mbuild-setup,19.2.3 安装MCR,第19.1节中提到MATLAB Compiler 4由三个组件构成,即MATLAB Compiler、MATLAB Component Runtime(MCR)和Component Technology File(CTF)。MATLAB Component Runtime集成了MATLAB所有的语言特性和核心共享函数库,由MATLAB Compiler创建的独立可执行应用程序、函数库或组件的正常运行都需要MCR的支持。在进行应用程序发布时,考虑到最终用户的计算机上可能没有安装MATLAB,用户需要将编译生成的目标文件,连同相应的CTF文件和MCR安装文件一并打包发布给最终用户。最终无须拥有MATLAB环境,只需要安装MCR,就能正常运行发布的应用程序。如果发布的是独立可执行应用程序,则需要发布给最终用户的是CTF文件和MCR安装文件;如果发布的是动态共享库,则需要发布给最终用户的是动态库文件(DLL)、相应的头文件(.h)、库文件(.lib)以及CTF文件和MCR安装文件。,19.3 编译器使用入门,本节将具体介绍MATLAB Compiler的使用方法。首先详细讨论mcc编译命令的用法,主要是各类编译选项的含义等;在此基础上以示例的形式介绍M函数文件的完整编译过程,第19.3.3节介绍了含绘图指令的M文件编译。,19.3.1 mcc编译指令,mcc编译指令是MATLAB Compiler提供给用户进行应用程序发布的一组命令行工具,用户通过设置不同的开关选项完成各种不同的应用程序发布任务。下面分别给出了MATLAB Compiler 4和MATLAB Compiler3两个版本的mcc使用方法。,19.3.2 M文件编译,前面的一小节对mcc的使用进行了概要式的介绍,本小节及下一小节通过两个例子分别讨论M文件和含绘图指令的M文件的编译过程,目的是熟悉mcc的使用方法。,19.3.3 编译含绘图指令的M文件,强大的图形功能和灵活的数据可视化能力是MATLAB流行的重要原因。本小节讨论如何将包含绘图指令的MATLAB应用程序转换为独立可执行应用程序。,19.4 由M文件创建独立可执行应用程序,第19.3节的两个示例已经详细讨论了如何利用MATLAB Compiler生成独立可执行的应用程序,这两个例子中的M函数文件都是具有输入参数的函数文件,一般很少将具有参数的M文件直接转换为独立可执行应用程序,而是另外编写一个不含参数的M文件作为主函数文件,通过主函数文件调用含参数的M函数文件。第19.3.2节例19.2中的M函数文件包含参数n,在系统命令窗口调用生成的可执行应用程序时,输入参数以字符的形式传入函数之中,因此在函数的开始需要将其转换数值类型,否则会出现执行错误。这里的输入参数仅是一个数值标量,如果输入参数为矩阵,那么将很难通过系统命令窗口运行程序。,19.5 由M文件创建函数库(DLL),用户可以利用MATLAB Compiler将M函数文件编译为共享函数库(DLL),这些共享函数库可以被C/C+/FORTRAN等高级语言调用。本节介绍如何由M文件生成C共享函数库,以及如何在C中调用这些函数的方法。,