




已阅读5页,还剩113页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 4 20 合肥工业大学机械与汽车工程学院 MATLAB程序编译 山东省科学院计算中心刘焕进E mail liuhuanjinliu 1 2020 4 20 MATLAB编译器的工作机理MATLAB编译器的安装与配置编译部署典型案例介绍 本章的主要内容包括 2 2020 4 20 第一节MATLAB编译器的工作机理 3 2020 4 20 MATLAB编译器产品简介 MATLAB编译器的功能 几个要点 关于MATLAB编译器产生的应用程序或运行库 关于打包器 wrapper 文件 组件技术文件 CTF 本节的主要内容包括 4 2020 4 20 MATLAB编译器产品是MATLAB应用程序集成与发布的一种重要工具 它是一个运行于MATLAB环境的独立工具 MATLAB编译器可以将M文件 MEX文件 MATLAB对象或其它MATLAB代码转换为C C 代码 然后再调用外部C C 编译器把产生的源代码编译 链接成独立的应用程序 库 COM对象以及Excel插件 MATLAB编译器产品简介 5 2020 4 20 1 将M文件编译成为可以在UNIX Windows和Macintosh操作系统上独立运行的应用程序 独立运行的应用程序就是在其运行过程中可以不需要MATLAB软件的同时运行 此外 也可以在没有安装MATLAB软件的计算机上运行这些应用程序 2 将M文件编译成为C和C 共享函数库 在Windows系统上应用的动态链接库DLLs Linux和UNIX系统下为共享的库文件 MATLAB编译器的功能 6 2020 4 20 3 MATLABBuilderEX可以将MATLAB函数打包 以便MicrosoftExcel用户可以通过VBA在Excel程序中访问这些函数 4 MATLABBuilderJA可以将MATLAB中的M代码函数封装到Java类中 Java类是Java代码的一部分 包含了Java方法以及执行动作的单元 5 MATLABBuilderNE可以将MATLAB函数打包 以便 NET用户可以从任何CLS相兼容的语言中访问这些函数 7 2020 4 20 一 关于MATLAB编译器产生的应用程序或运行库 当用户打包和部署由MATLAB编译器产生的应用程序和运行库时 必须包含MATLAB编译器运行库 MATLABCompilerRuntime 简称MCR 以及由编译器产生的一系列支持文件 同时 必须在目标计算机上指定这些文件的系统路径 以便系统能够找到这些文件 MATLAB编译器产生的应用程序或运行库包括两部分 一个平台相关的二进制文件以及一个包含MATLAB函数和数据的文档 CTF 应用程序的二进制文件由一个主函数组成 而运行库的二进制文件由多个用户输出的函数组成 几个要点 8 2020 4 20 二 关于打包器 wrapper 文件 要产生用户指定的 平台相关的二进制文件 编译器产生一个或多个打包器文件 打包器文件提供了指向被编译的M代码的接口 函数 通过这些接口 打包器文件可以创建MATLAB编译器生成的代码与所支持的可执行程序 如独立应用程序或库 之间的链接 打包器文件依据执行环境的不同而不同 打包器文件主要实现如下功能 1 通过特定的接口 函数 执行初始化和终止工作 2 定义包含路径信息 密钥以及MCR所需的其它信息的数据数组 3 提供必需的代码 用来将调用信息从接口函数传递给包含在MCR中的MATLAB函数 4 对于应用程序 包含主函数 main函数 5 对于运行库 包含每个公开的M函数的入口点 当使用编译器产生的运行库时 在客户端代码中调用库初始化和终止例程 9 2020 4 20 三 组件技术文件 CTF 组件技术文件 ComponentTechnologyFile 简称CTF MATLAB编译器在编译的同时也产生组件技术文件 CTF 该文件独立于应用程序或运行库 并于每个操作系统平台相关的 该文件以 ctf作为后缀 包含定义应用程序或运行库的MATLAB函数和数据 并且在默认的情况下 内嵌于共享的C C 库和独立的应用程序的二进制文件中 10 2020 4 20 第二节MATLAB编译器的安装及配置 11 2020 4 20 安装要求 编译器的安装 编译器的配置 本节的主要内容包括 12 2020 4 20 一 安装要求 在安装MATLAB编译器之前 用户必须确保在系统中安装了合适版本的MATLAB软件 MathWorks公司的网站上提供了相关的信息 用户可在以下网页中查找编译器的相关信息 1 系统要求 13 2020 4 20 MATLAB编译器还需要在系统中安装其所支持的ANSIC C 编译器 例如 BorlandC C MicrosoftVisualC WatcomC C LccC编译器等 通常 MATLAB编译器都支持第三方编译器的当前版本以及旧的版本 对于MATLAB以及MATLAB编译器所支持的最新的编译器列表 请参照MathWorks公司技术支持部门的技术备忘录 其网址为 2 支持的第三方编译器 14 2020 4 20 1 支持的ANSIC C Windows平台编译器使用如下的32位的C C 编译器可以产生32位Windows动态链接库 DLLs 或Windows应用程序 以MATLABV4 14 R2010b 编译器为例 1 LccC2 4 1 包含于MATLAB中 这仅是个C编译器 不针对C 2 MicrosoftVisualC MSVC 6 0 8 0 9 0 10 0 3 IntelC 11 1 4 OpenWatcom1 8 5 IntelVisualFortran10 1 11 1 6 Microsoft NETFrameworkSDK2 0 3 0 3 5 7 SunJavaDevelopmentKit JDK 1 6 1 支持的ANSIC C UNIX平台编译器在Solaris平台上 MATLAB编译器支持本地系统编译器 在Linux Linuxx86 64和MacOSX平台上 MATLAB编译器支持gcc和g 15 2020 4 20 二 编译器的安装 MATLAB编译器包含于MATLAB软件产品中 因此 如果用户初次安装MATLAB软件产品 可以在安装的过程中选中要安装的MATLAB编译器产品 然后执行标准安装 如果在初次安装的过程中没有选中MATLAB编译器产品 可以重新运行安装程序 选中要安装的MATLAB编译器产品 然后安装即可 1 安装MATLAB编译器产品 16 2020 4 20 安装MATLAB软件的过程中选择安装编译器产品 17 2020 4 20 要安装ANSIC C 编译器 需要执行包含有C C 编译器的安装向导 正常安装并正确配置即可 用户在安装C C 编译器时可能会遇到有关配置的问题 下表提供了有关配置信息的常见问题 2 安装ANSIC C 编译器 18 2020 4 20 19 2020 4 20 1 关于mbuild的应用 三 编译器的配置 用户使用mbuild脚本可以方便地指定一个选项文件 optionsfile 该选项文件允许用户进行如下操作 为每个可支持的编译器设置默认的编译器和连接器选项 修改编译器或编译器设置 创建应用程序 mbuild简化了设置C或C 编译器的过程 用户只需使用mbuild的setup选项即可一次性确定所要使用的第三方编译器 MATLAB编译器 mcc 产品在一定的条件下自动启动mbuild 特别地 mcc m或mcc l 小写的L 将启动mbuild来执行编译和连接 20 2020 4 20 2 配置ANSIC或C 编译器 说明 选项文件包含用来控制已安装的编译器的标志或设置 选项文件是与编译器相关的 MathWorks公司对不同的C C 编译器都提供了不同的选项文件 用户可以根据需要修改选项文件的内容 但在通常情况下 用户不必关心选项文件的内容 而只是简单地使用mbuild的setup选项来配置C或C 编译器即可 使用下面的命令可以选择一个默认的编译器 mbuild setup 21 2020 4 20 例 配置编译器 mbuild setup 调用mbuild脚本来启动配置PleasechooseyourcompilerforbuildingstandaloneMATLABapplications 启动MATLAB的自定位系统 MATLAB会自动搜索系统中安装的编译器Wouldyoulikembuildtolocateinstalledcompilers y n ySelectacompiler 1 Lcc win32C2 4 1inD PROGRA 1 MATLAB R2008a sys lcc 2 MicrosoftVisualC 6 0inD ProgramFiles MicrosoftVisualStudio 0 NoneCompiler 2 选择编译器Pleaseverifyyourchoices 确定选择的编译器Compiler MicrosoftVisualC 6 0Location D ProgramFiles MicrosoftVisualStudioArethesecorrect y n y 结束配置Tryingtoupdateoptionsfile C DocumentsandSettings Administrator ApplicationData MathWorks MATLAB R2008a compopts batFromtemplate D PROGRA 1 MATLAB R2008a bin win32 mbuildopts msvc60compp batDone 22 2020 4 20 验证编译器配置是否正确 在当前目录中创建test m文件 文件内容很简单 弹出信息框 显示 Hello World 信息 在命令窗口中调用mcc对test m文件进行编译 mcc mtest m编译完成后 产生test exe文件 用鼠标双击即可正常运行 表明编译器设置正确 23 2020 4 20 3 选项文件 MATLAB软件中包含了用于Windows平台和UNIX平台的预置选项文件 如下表所列 以MATLABR2008a为例 注 这些选项仅适用于32位MATLAB软件 通常情况下 用户不必关心选项文件是如何工作的 当然 用户也可以根据自己的需要来修改选项文件 24 2020 4 20 MATLAB中的预置选项文件列表 25 2020 4 20 要定位在Windows系统下的选项文件 mbuild脚本按照如下的顺序进行搜索 1 当前目录 2 Windows系统的用户配置文件目录 Windows系统的用户配置目录中包含了诸如桌面外观 最近使用的文件 开始 菜单中的项目等用户信息 mbuild将在 setup过程中创建的选项文件compopts bat保存到用户配置文件目录的一个子目录中 例如C DocumentsandSettings Administrator ApplicationData MathWorks MATLAB R2008a 如下图所示 初次运行mbuild命令时 它会在上述两个路径中搜索选项文件 一旦找到选项文件则停止搜索 并使用该选项文件 如果没有搜索到选项文件 则mbuild搜索计算机上已安装的编译器 并为该编译器使用MATLAB预置的选项文件 如果计算机上有多个编译器 则提示用户选择一个编译器 关于Windows操作系统中的选项文件 26 2020 4 20 27 2020 4 20 要定位在UNIX系统下的选项文件 mbuild脚本按照如下的顺序进行搜索 1 当前目录 2 HOME matlab current release 3 matlabroot bin 关于Unix操作系统中的选项文件 28 2020 4 20 第三节编译 29 2020 4 20 有关MATLAB编译器技术mcc命令详解输入输出文件 本节的内容包括 30 2020 4 20 一 有关MATLAB编译器技术 MATLAB编译器4 0使用MATLAB运行库 MCR MCR是一个使M文件能够执行的共享库的独立集合 使用MCR 可以在没有安装MATLAB软件的计算机上执行MATLAB文件 MCR提供了对MATLAB中几乎所有函数的支持 MCR使用了线程封锁技术 保证一次只能有一个线程允许访问MCR 1 MATLAB编译器运行库 MATLABCompilerRuntime 31 2020 4 20 编译器4 0使用了组件技术文件 CTF 来容纳可部署的程序包 所有的M文件都被加密到CTF文档中 加密时使用高级加密标准 AES 密码系统 其对称密钥使用1024位的RSA来保护 MATLAB编译器所产生的每一个应用程序或共享库都有相关联的CTF文档 文档中包含所有与组件相关联的 基于MATLAB的内容 M文件 MEX文件 等等 当CTF档案档案解压到用户的系统中时 这些文件仍保持加密状态 2 组件技术文件 32 2020 4 20 1 依存关系检查分析 判断用户提供的M文件 MEX文件以及P文件所依存的函数之间的关系 并创建文件列表 该列表包括由输入的M文件调用的所有M文件以及这些M文件所调用的文件 等等 此外 还包括所有内置函数以及MATLAB对象 2 封装代码生成产生创建目标组件所需要的所有源代码 包括 应用于命令行的M函数的C C 接口代码 ex21 3 1 main c 对于数据库和组件 该文件包括所有的接口函数 组件数据文件 该文件包含运行时执行M代码所需的信息 这些信息包括路径信息以及用于加载保存在组件的CTF文档中的M代码的密钥 3 组件创建过程 33 2020 4 20 3 CTF文档创建在依赖检查中创建的MATLAB文件 M文件和MEX文件 列表用于创建CTF文档 CTF文档包含组件正常执行所需要的文件 这些文件被加密并压缩到单个文件中以方便部署 目录信息也包含在其中 以确保目录中的文件能被正确地安装到目标计算机 4 C C 编译将在 封装器代码生成 中产生的C C 文件编译为目标代码 用户在mcc命令行中指定的C C 代码也同时被编译 5 连接将产生的目标文件和必需的MATLAB库文件相连接 并生成最终的组件 C C 编译和连接使用包含在MATLAB编译器产品中的mbuild应用程序 34 2020 4 20 MATLAB编译器的编译过程 35 2020 4 20 二 mcc命令详解 1 mcc命令的语法 mcc options mfile1 mfile2 mfileN C C file1 C C fileN 其中 参数options可以选择如下的值 1 a使用 afilename来指定直接添加到CTF文档中的文件 也可以使用多个 a选项 MATLAB编译器在MATLAB路径上查找这些文件 如果文件不在MATLAB路径上 需要指定文件的完整路径名称 如果 a选项中只包括目录的名称 则目录中的所有文件将循环添加到CTF文档中 例如 将当前工作目录中的testdir目录及其子目录中的所有文件都添加到CTF文档中 并且目录的子树也保存到CTF文档中 36 2020 4 20 mcc mhello m a testdir如果在文件名中包含通配符 则只有在目录中符合给定格式的文件被添加的CTF文档中 而子目录中的文件却不会被添加 例如 mcc mhello m a testdir 在本例中 在 testdir目录中的所有文件都会被添加到CTF文档中 而在 testdir目录下的所有子目录中的文件则不被添加 mcc mhello m a testdir m testdir目录下所有扩展名为 m的文件都将被添加到CTF文档档案中 而在 testdir目录下的所有子目录中的文件则不被添加 37 2020 4 20 其中 参数options可以选择如下的值 1 a使用 afilename来指定直接添加到CTF文档中的文件 也可以使用多个 a选项 MATLAB编译器在MATLAB路径上查找这些文件 如果文件不在MATLAB路径上 需要指定文件的完整路径名称 如果 a选项中只包括目录的名称 则目录中的所有文件将循环添加到CTF文档中 例如 将当前工作目录中的testdir目录及其子目录中的所有文件都添加到CTF文档中 并且目录的子树也保存到CTF文档中 38 2020 4 20 2 b产生与Excel兼容的公式函数产生一个VisualBasic文件 bas 该文件包含一个用于编译器产生的COM对象的Excel公式函数 MicrosoftExcelFormulaFunction 界面 允许MATLAB函数作为单元公式函数使用 3 B指定束 bundle 文件使用指定文件的内容来替代在mcc命令行中的文件 使用语法为 Bfilename 束文件filename应只包含mcc命令行选项 相应的参数 和 或其它文件名 束文件可以包含其它 B选项 下表列出了MATLAB编译器产品中的束文件列表 39 2020 4 20 4 c 小写C 只产生C代码当使用宏选项时 只产生C封装代码 而不启动mbuild而产生独立的应用程序 该选项相当于放在mcc命令行的末尾的 Tcodegen 5 C 大写C 默认情况下不嵌入CTF文档缺省情况下 指示mcc不在C C 文件 main Winmain共享库和独立的二进制文件中嵌入CTF文档 6 d指定输出目录 ddirectory将编译产生的输出存放到由 d选项指定的目录directory中 40 2020 4 20 7 e禁止MS DOS命令窗口当产生独立的应用程序时 禁止MS DOS命令窗口的出现 使用 e来替换 m选项 该选项仅用于Windows系统 使用 R选项来产生错误日志文件 mcc e R logfile log file txt vfunction name该宏等价于 WWinmain Tlink exe使用 e选项需要应用程序是使用微软的编译器 例如MicrosoftVisualStudioExpress 编译的 而不是使用MABLAB自带的编译器编译的 8 f指定的选项文件 ffilename使用指定的选项文件覆盖默认的选项文件 该选项可使用户在调用不同的MATLAB编译器产品时使用不同的ANSI编译器 该选项直接传递给mbuild脚本 MathWorks建议用户不使用该选项 而直接使用mbuild setup命令 41 2020 4 20 9 F指定的项目文件 指定mcc使用包含在指定的项目文件 prj 中的设置 当调用mcc时 使用 Fproject name prj用来指定项目文件的名称为project name 该选项使得 prj文件及其所有附属的设置都返回给mcc 使用mcc或deploytool创建的项目文件都可以用到该选项中 10 g产生调试信息包含由MATLAB编译器产生的C C 代码的调试信息 mbuild会将合适的调试标志传递给C C 编译器 调试选项使得用户可以追溯在什么地方产生了错误 是在MCR的初始化 函数的调用还是终止例程中产生了错误 该选项不允许用户使用C C 调试器来调试用户的M文件 11 G同 g 仅用于调试 42 2020 4 20 12 I添加目录到引用路径中向引用目录列表中添加新的目录 每一个 I选项都会在搜索路径的列表的开头添加一个目录 例如 I I设置搜索路径 从而directory1首先用于M文件的搜索 接下来是directory2 该选项对于不能访问MATLAB路径的独立编译来说是很重要的 13 l 小写L 生成函数库该选项为命令行中的每一个M文件生成一个库封装函数 并调用C编译器来创建共享库 该共享库导出这些函数 库的名字与组件的名字相同 也就是命令行上的第一个M文件的名字 该宏等价于 Wlib stringlink lib 14 m产生一个独立的应用程序该宏等价于 Wmain Tlink exe 使用 e选项代替 m选项来产生独立的应用程序 同时禁止MS DOS命令窗口的出现 使用 e选项需要应用程序是使用Microsoft的编译器 例如MicrosoftVisualStudioExpress 编译的 43 2020 4 20 15 M定义编译时间选项 Mstring将string直接传递给mbuild脚本 这提供了一种定义编译时间选项的有用机制 例如 Dmacro value 如果使用多个 M选项 只有最右边的一个起作用 16 N清除路径有效清除最小目录集以外的路径 下列的核心目录及其子目录除外 matlabroot toolbox matlabmatlabroot toolbox localmatlabroot toolbox compiler deploy在mcc命令行中包含 N选项 允许用户替换原始路径中的目录 同时保留引用目录的相对顺序 出现在原始路径中的引用目录中的所有子目录也将被替换 此外 N选项保留用户已经引用 但不在matlabroot toolbox路径下的所有目录 44 2020 4 20 17 o指定输出文件名称指定最终可执行文件的名称 仅用于独立的应用程序 使用 ooutputfile来命名MATLAB编译器产生的最终可执行输出文件 在指定的名称后将添加合适的 与平台相关的扩展名 如 exe用于Windows独立应用程序 18 p向编译路径中添加目录和选项 N联合使用 可以添加matlabroot toolbox路径下指定的目录和子目录到MATLAB编译路径下 N pdirectory其中 directory是要添加的目录 如果directory不是绝对路径 则假定它在当前工作目录下 以下规则定义了这些目录是如何在编译路径中引用的 如果目录在原始MATLAB路径上 则目录及其子目录都被添加到编译路径下 如果目录不在原始MATLAB路径上 在该目录不会被添加到编译路径下 用户可以使用 I选项来添加 45 2020 4 20 19 R运行时间 仅适用于独立的应用程序 提供MCR运行库选项 使用 Roption可以提供如下表所列的运行选项 20 S创建单个MCR当编译多个COM对象时 创建单个MCR 每个组件的实例都使用相同的MCR 该选项需要MATLABBuilderNE编译器 46 2020 4 20 21 T指定产生目标文件的阶段和类型使用 Ttarget来定义输出的类型 有效的target的值如下表所列 22 v详述 v选项传递给mbuild并显示关于mbuild的信息 包括 MATLAB编译器版本号 源文件名称 产生的输出文件名称 mbuild的启动 47 2020 4 20 23 w警告信息显示警告信息 使用 woption 来控制警告信息的显示 有效的语法形式如下表所示 48 2020 4 20 24 W打包器文件使用 Wtype来控制打包器函数的创建 用户提供一组函数 MATLAB编译器产生打包器函数以及合适的全局变量定义 下表列出了有效的选项 49 2020 4 20 25 Y许可文件使用 Ylicense dat file来使用指定的参数覆盖默认的license dat文件 26 z指定路径为库文件和引用文件指定路径 使用 zpath来指定编译器库文件和引用文件所使用的路径为path 从而代替由matlabroot返回的路径 27 帮助信息在命令提示下显示MATLAB编译器的帮助信息 50 2020 4 20 2 使用mcc命令 1 编译器选项 可以给mcc指定一个或多个MATLAB编译器选项 例如 mcc m gmyfile m宏是MATLAB提供的编译器选项 使得用户不必手工组合多个选项来实现指定的编译工作 例如 选项 l与下列宏等价 Wlib Tlink lib选项 m与下列宏等价 Wmain Tlink exe 51 2020 4 20 2 组合选项 可以把不带参数的选项组合到一起使用 例如 mcc mgmyfile m带参数的选项通常不能组合到一起 除非把带参数的选项及其参数放置在命令列表的最后 例如 下面是正确的用法 选项单独列出mcc v Wmain Tlink exemyfile m 将选项组合mcc vWmain Tlink exemyfile m下面是错误的用法 mcc Wvmain Tlink exemyfile m 错误的用法 52 2020 4 20 3 命令行中的冲突选项如果在命令行中使用的选项发生冲突 则编译器优先考虑最右侧的选项 例如 在命令行中使用以下选项 mcc m Wnonemyfile m由于 m选项相当于 Wmain Tlink exe 因此两个 W选项发生冲突 则编译器只取最右边的选项 即 Wnone选项 所以 以上命令与下列命令等价 mcc Wnonemyfile m 53 2020 4 20 三 输入和输出文件 例2 MATLAB编译器以ex21 3 1 m作为输入 产生独立的应用程序ex21 3 1 exe 1 独立的可执行文件 functionex21 3 1x 0 pi 50 2 pi y sin x figure 1 plot x y r gridon 54 2020 4 20 最终产生的文件列表 55 2020 4 20 例 在本例中 MATLAB编译器将M文件ex21 3 1 m编译为C共享库文件libmyshared dll 用户在配置好编译器后 在命令窗口中输入命令 mcc Wlib libmyshared Tlink libex21 3 1 m 2 C共享库文件 编译所产生的文件如下表所列 56 2020 4 20 57 2020 4 20 例 在本例中 MATLAB编译器将M文件ex21 3 1 m编译为C 共享库文件libmyshared dll 在命令窗口中输入命令 mcc Wcpplib libmyshared Tlink libex21 3 1 m 3 C 共享库文件 编译所产生的文件如下表所列 58 2020 4 20 59 2020 4 20 第四节部署 60 2020 4 20 1 确定需要打包的文件 2 使用部署工具 DeploymentTool 3 部署到目标计算机 本节主要包括以下内容 61 2020 4 20 当用户创建了数据库 组件或应用程序后 需要将运行时所需的文件打包 以便部署到目标计算机中 那么 对不同的应用程序类型 到底哪些文件需要打包呢 以下分别介绍 一 确定需要打包的文件 62 2020 4 20 1 独立的应用程序 63 2020 4 20 2 C C 共享库 64 2020 4 20 3 NET组件 65 2020 4 20 4 COM组件 66 2020 4 20 5 使用MicrosoftExcel的COM组件 6 Java组件用户需创建包含componentName jar文件的Java软件包 该软件包在componentName ctf文件中包含指向M代码的Java接口 67 2020 4 20 部署工具是MATLAB编译器配备的图形用户界面 GUI 用户可以通过该工具提供的图形用户界面来使用MATLAB命令行接口 以编译并打包要部署在不同计算机上的组件 用户可通过部署工具执行以下操作 1 指定主MATLAB函数 2 添加无法通过依赖检查自动识别的文件 如数据文件或图像等 3 保存编辑和打包首选项内容到项目文件 prj 中 4 对MATLAB应用程序进行编译和打包 当用户构建应用程序或组件时 MATLAB编译器可以确定需要哪些MATLAB函数来支持用户添加的文件并对代码进行加密 然后将这些文件封装为可执行文件或组件 二 使用部署工具 68 2020 4 20 在CommandWindow中输入deploytool命令 将会出现如图所示的对话框 用户可以选择新建一个部署项目 或者打开一个已有的部署项目 69 2020 4 20 1 新建项目 选择File NewDeploymentProject菜单项或者使用鼠标点击工具条上的New按钮 将会弹出 NewDeploymentProject 对话框 70 2020 4 20 分别选择左侧列表中的MATLAB编译器产品 在右侧列表中列出对应的编译器产品所能创建的应用程序类型 MATLABCompiler产品 71 2020 4 20 MATLABBuilderEX产品 72 2020 4 20 MATLABBuilderNE产品 73 2020 4 20 MATLABBuilderJA产品 74 2020 4 20 2 向项目中添加需要编译的文件 在新建项目中的 NewDeploymentProject 对话框中点击OK按钮 即可弹出如下图所示的对话框 选择Project菜单中的AddFile菜单项或点击工具条中的 AddFile 按钮 可弹出 Open 对话框 用户可以定位所需的文件并把它们添加到项目中 75 2020 4 20 3 设置项目的相关信息 选择Project菜单的 Setting 菜单项或点击工具条上的 Setting 按钮 可打开 DeploymentProjectSettings 对话框 在对话框中可对项目的相关选项进行设置 76 2020 4 20 1 General选项卡的设置 77 2020 4 20 定义应用程序的名称 Applicationname 如myplot 在OutputDirectories编辑区域 用户可以设置编译过程中使用的中间目录 Intermediate 以及输出目录 Output 默认情况下 deploytool会在图21 4 2所示的Location目录下创建两个子目录Project Name src和Project Name distrib 其中Project Name为在图21 4 2所示的对话框的Name中输入的项目名称 deploytool会把编译过程中产生的中间文件存放到Project Name src中间目录中 把最终编译好并可用来部署的文件存放到Project Name distrib目录中 可以选择是否产生详细的输出信息 GenerateVerboseOutput 可以选择是否CTF文档嵌入到应用程序中 EmbedCTFarchiveintotheApplication 在MCR选项中 可以选择在运行时是否加载Java虚拟机 JVM 等 在 CompilerOptionsFile 区域 可以定位所需要的选项文件 78 2020 4 20 2 ToolboxesonPath 选项 用户可以设置在项目的创建过程中要搜索哪些工具箱 去掉不必要的工具箱可以减少编译的时间 也会减小CTF的大小 79 2020 4 20 3 C C Compiler 选项 用户可以修改C C 编译器设置 例如 为封装的代码产生调试信息 可以帮助用户发现应用程序中的问题 80 2020 4 20 4 Warning 选项 用户可以指定在编译的过程中将在输出窗口中产生哪些MATLAB编译器信息 81 2020 4 20 5 Packaging 选项 用户可以对程序打包所需要的信息和文件进行设置 用户可以指定程序包的名称 PackageName 将指定的MCR文件包含进程序包 同时 也可以指定项目中未包含 但为使MATLAB代码可以正常运行所需要的外部文件 82 2020 4 20 4 对项目进行编译和链接 经过上述2 3两个步骤 用户可选择DeploymentTool窗口上的Tools菜单中的Build菜单项 或者点击工具条上的 Buildtheproject 按钮 即可对项目进行编译和连接 并在 DeployToolOutput 窗口中给出信息提示 83 2020 4 20 在编译和连接完成后 可以看到在项目所在的路径下新产生了两个子目录 其中 distrib子目录中包含文件即为用户用来部署到目标计算机中的文件 84 2020 4 20 5 打开一个已有项目 在利用mcc命令来将m文件编译为独立的应用程序时 可以看到 在目标文件夹中的文件中包含了后缀为 prj的文件 该文件即为相应的项目文件 可以使用deploytool部署工具来打开该文件 在deploytool中打开该文件后 用户可以重新修改项目的设置 然后重新编译该项目文件 6 将文件打包 无论对于由mcc命令编译产生的文件或者由deploytool工具编译产生的文件 prj 都可以使用deploytool工具打开 然后将需要的文件进行打包 以便部署到目标计算机中 用户可以对需要打包的文件进行设置 可以选择将MATLABCompilerRuntime MCR 包含到软件包中 也可以选择将其它需要的文件包含到软件包中 选择Tools菜单中的Package菜单项 或者点击工具条上的 Packagetheproject 按钮 deploytool工具会自动将所需的文件进行打包处理 并且在输出窗口中给出提示信息 85 2020 4 20 打包信息提示 86 2020 4 20 1 Windows操作系统下的部署步骤 1 打开包含运行时所需的软件包 2 在目标计算机上运行MCRInstaller一次 MCRInstaller将打开一个命令窗口 开始安装 3 如果部署的是Java应用程序 用户必须在目标计算机上设置Java类所在的路径 2 Unix操作系统下的部署步骤 1 安装MCR 找到MCRInstaller zip文件 把它复制到目标计算机上的文件夹中 该文件夹将成为数据库或应用程序的安装文件夹 然后解压MCRInstaller zip文件 并安装MCR 2 正确地设置路径环境变量 3 如果部署的是Java应用程序 用户必须在目标计算机上设置类的路径 三 部署到目标计算机 87 2020 4 20 例 将包含应用程序的软件包部署到目标计算机中 将例21 4 1生成的软件包first pro pkg exe复制到目标计算机中的某一个文件夹 然后按照如下步骤来部署 1 双击first pro pkg exe图标 运行软件包自解压程序 88 2020 4 20 2 自动运行MCRInstaller exe程序 安装MCR 89 2020 4 20 90 2020 4 20 3 安装完MCR后 即可在软件包所在的文件夹中找到first pro exe文件 双击该文件 即可显示DOS界面 解压CTF文件 并运行应用程序 91 2020 4 20 第五节典型案例介绍 92 2020 4 20 以下示例程序均以MATLABCompiler4 8 R2008a 为编译工具 有关Compiler4 8的详细信息 请参考MATLAB在线帮助文档 说明 93 2020 4 20 1 案例背景在MATLAB中的M文件有两种 脚本文件 MATLABscripts 和函数文件 MATLABfunctions 两种M文件都是以 m作为文件扩展名 但有很大的不同 MATLAB提供了丰富的绘图函数 可以实现强大的绘图功能 利用句柄图形 HandlesGraphics 的概念 用户可以解决复杂的绘图问题 本例主要讲述利用MATLAB提供的命令来创建图形窗口 坐标轴 按钮控件 并且在坐标轴中绘制图形 修改图形的颜色 将代码保存为MATLAB脚本文件 最后 利用MATLAB编译器编译为独立的应用程序 一 将脚本M文件编译为独立的应用程序 94 2020 4 20 2 编程要点利用5 4中介绍的直接编写M文件来开发图形用户界面的方法来创建一个图形窗口 figure 名称为 changecurvecolor 一个坐标轴 axes 在其中绘制正弦曲线 在其上创建四个下压按钮 pushbutton 其中三个用于改变曲线的颜色 一个用于关闭图形窗口 将代码保存为脚本文件 利用MATLAB自带的LccC编译器 调用mcc m命令来编译M文件 生成的应用程序在运行时带有MS DOS窗口 利用MicrosoftVisualC 6 0编译器 调用mcc e命令来编译M文件 生成的应用程序在运行时不再带有MS DOS窗口 将生成的可执行文件打包 以便部署到其它计算机中 95 2020 4 20 3 实现 1 创建图形用户窗口 代码保存为curve color m文件 2 设置MATLAB自带的LccC编译器 并编译M文件 mbuild setup mcc mcurve color m ddir1编译完成后 在dir1中出现编译生成的文件 96 2020 4 20 双击curve color exe文件 即可运行应用程序 可以看到 程序运行时会出现MS DOS窗口 97 2020 4 20 3 设置MicrosoftVisualC 6 0编译器 并编译M文件 mbuild setup mcc mcurve color m ddir1编译完成后 在dir1中出现编译生成的文件 98 2020 4 20 双击curve color exe文件 即可运行应用程序 可以看到 程序运行时不会出现MS DOS窗口 4 利用DeploymentTool将应用程序进行打包处理 99 2020 4 20 1 案例背景函数M文件也是用户使用MATLAB编程时经常使用的文件形式之一 将MATLAB代码封装为函数M文件的形式 可以使得M文件能够接受用户的输入信息 并将处理的结果返回给用户 由其是对于大型的应用程序 可以将其划分为一个个小的功能模块 每一个功能模块使用函数M文件来实现 最终集成为整个应用程序 使用函数M文件 用户也可以很方便地扩展MATLAB的工具箱 等等 本例讲述如何将函数M文件编译为独立的应用程序 将上述示例程序修改为函数M文件保存 并且调用MATLAB编译器来创建独立的应用程序 二 将函数M文件编译为独立的应用程序 100 2020 4 20 2 编程要点 要将curve color m应用程序修改为函数M文件 用户需要执行如下的操作 2 代码的开头添加function关键字来定义函数的名称 functioncurve colorh0 figure toolbar none units normalized position 0 20 20 60 5 name changecurecolor function为MATLAB的关键字 用来定义函数 curve color为函数的名称 函数名称必须按照MATLAB中对变量名称的约定来定义 函数也可以选择带输入和输出参数 例如 function out1out2 funname in1 in2 在这里选择不带输入和输出参数 101 2020 4 20 2 修改程序的代码称 由于定义各个按钮的回调函数 Callback 为字符串形式 回调函数的代码在基本 base 工作空间中执行 其中的set语句引用的图形对象的句柄必须保存在基本工作空间中 而将M文件定义为函数M文件后 图形对象的句柄是保存在了函数 caller 工作空间中的 而这两个工作空间中的变量是不能直接相互访问的 所以 如果不修改代码 则运行程序并点击按钮后会出现如下错误 提示句柄无效 Errorusing setInvalidhandleobject ErrorwhileevaluatinguicontrolCallback要解决这个问题 有两条途径 将函数M文件中的变量定义为全局变量全局变量的作用于为整个MATLAB工作空间 全局变量一旦定义 MATLAB的任何函数都可以访问和修改 要把变量定义为全局变量 只需调用global命令即可 global命令的调用格式如下 globalXYZ其中 X Y Z表示要定义的全局变量的名称 可以同时定义多个全局变量 变量的个数没有严格的限制 用户在引用全局变量时 必须调用global命令来事前声明全局变量 然后才能调用全局变量 清除全局变量时 需调用clear命令 clearglobalvar 其中 var为全局变量的名称 102 2020 4 20 将函数M文件中的变量指派到基本工作空间中assignin将函数M文件中的变量的值指派给指定工作空间中的变量 函数的调用格式如下 assignin ws var val 其中 ws为标识工作空间的字符串 其值可以为 base 或 caller val为函数M文件中的局部变量 var 为指定工作空间ws中的变量 若变量 var 在指定工作空间中不存在 则MATLAB自动创建该变量 修改程序的代码 将图形句柄k的值指派到基本工作空间中的变量k assignin base k k 修改后的M文件见curve color2 m 函数M文件的编译和部署的方法与脚本M文件相同 在此不赘述 103 2020 4 20 1 案例背景MATLAB提供了一个专门用于GUI程序设计的快速开发环境 GUIDE 利用GUIDE这一界面设计工具集 用户不需要编写任何代码 即可以通过鼠标的简单拖拽就能迅速地产生各种GUI控件 并可以根据要求方便地修改它们的外形 大小 颜色等属性 从而帮助用户方便地设计出各种符合要求的图形用户界面程序 GUI 此外 比较复杂的MATLAB程序都是由多个M文件组成的 例如 一个应用程序有一个主函数M文件 主函数M文件又要调用其它的两个M文件 而这两个M文件又可能会调用其它的M文件 从而构成比较复杂的应用程序 对由多个M文件组成的应用程序的编译也是用户需要掌握的 三 对由GUIDE创建的GUI程序编译为可独立运行的程序 104 2020 4 20 2 编程要点MATLAB编译器在编译的过程中会有 依存关系检查 这一步骤 MATLAB编译器会对用户用于编译的M文件进行检查 确定用户提供的M文件需要调用哪些M文件以及这些M文件又要调用哪些M文件 等等 此外 MATLAB编译器也分析用户提供的M文件还要调用哪些MATLAB内置函数以及MATLAB对象 在依存关系检查中创建的MATLAB文件 M文件和MEX文件 列表用于创建CTF文档 CTF文档包含应用程序正常执行所需要的文件 这些文件被加密并压缩到单个文件中以方便部署 目录信息也包含在其中 以确保目录中的文件能被正确地安装到目标计算机 因此 在对包含多个M文件的MATLAB程序进行编译时 用户只需在mcc命令行中包含主函数M文件即可 MATLAB编译器会自动查找所需要的其它M文件 不需要用户逐个进行编译 用户也不需要担心会有哪些函数会被遗漏 由GUIDE创建的应用程序包括M文件和FIG文件 用户在利用MATLAB编译器进行编译时 其编译方法与普通的M文件的编译是一样的 如果存在多个M文件 则只需对主M文件进行编译 105 2020 4 20 1 案例背景C语言是目前世界上流行 使用最广泛的面向过程的高级程序设计语言 许多应用软件都是用C语言编写的 C语言提供了基本的函数库 程序员可以使用这些函数库来完成复杂的运算 处理大量的数值数据 但有时 这些基本的函数往往不能满足要求 需要程序员来编写高级函数来完成所需的运算 如矩阵运算等 而MATLAB具有几百个数学函数 可以完成数值分析 模拟与运算等强大的功能 因此 如果能在C开发环境中调用MATLAB强大的函数库 则能为应用程序的开发提供很大的方便 可以利用MATLAB编译器将MA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数字产业园建设项目技术方案
- 消费电子盖板玻璃产线项目建筑工程方案
- 建筑装饰设计方案
- 氟钛酸钾生产线项目建筑工程方案
- 8G瓦时固态锂离子电池项目技术方案
- DB54T 0051.2-2024 天麻半野生生产技术规程 第2部分:蜜环菌菌材生产
- DB54T 0012-2023 大白菜保护地生产技术规程
- 清洁护理知识培训
- 2025年建筑三类人员c3考试题库答案
- 中考语文作文题型解析与写作指导
- 统编版道德与法治(2024)三年级上册-第二单元-学科学-爱科学-第5课-《走近科学家》教学课件
- 乳品领域:认养一头牛企业组织架构及部门职责
- 宠物乐园方案
- 2022智慧园区设计、建设与验收技术规范
- 自备车补贴申请表
- 信息论与编码(第4版)完整全套课件
- 汽修厂安全风险分级管控清单
- GB/T 2679.7-2005纸板戳穿强度的测定
- GB/T 25840-2010规定电气设备部件(特别是接线端子)允许温升的导则
- GB/T 25146-2010工业设备化学清洗质量验收规范
- 参考资深同传
评论
0/150
提交评论