MATLAB编译器的编译过程
MATLAB编译器采用了Component Technology File(CTF)的存档方式来组织配置文件包,所有的M文件都运用高级加密标准(AES)进行了1024位密码的加密,并以CTF格式(.ctf)存储。读者可以在实际操作的过程中发现,任何一个由编译器产生的应用程序或者共享库均有一个与之对应的.ctf文件存档,其中当然也包括所有基于MATLAB的M文件和MEX文件。
MATLAB编译器生成的独立文件或组件的流程无须用户控制,是完全自动的。用户只需要提供一系列M文件程序作为构成应用程序。下面向读者讲解MATLAB编译器的基本编译流程。
(1)相关性分析。确定用户提供的M文件、MEX文件和P文件上有关的所有函数,包括给定的文件要调用的所有M文件,以及M文件调用的文件,还包括所有的内部函数和MATLAB对象。
(2)生成封装代码。生成建立目标组建所需要的所有源代码,包括以下内容。
① 提供在命令行上的连接到M函数的C/C++代码。对于库和组件,这个封装文件包含所有生成的接口函数。
② 一个组件数据文件,它包含运行时执行M代码所需要的信息。这些数据包括路径信息和加载保存在组建CTF档案上的M代码所需要的加密键。
(3)建立CTF档案。在相关性分析期间建立的MATLAB可执行文件列表,被用来建立CTF档案,档案上包含运行时正确执行组件需要的文件。为了部署程序,这些文件被加密并压缩成一个单一的文件。目录信息也包含在档案上,以便目录下的内容正确地安装在目标机器上。
(4)C/C++编译。从封装代码生成阶段生成的C/C++文件被编译成目标代码。在mcc命令行上由用户提供的C/C++代码文件也在这时被编译。
(5)连接。连接生成的目标文件与必要的MATLAB库,以建立最终的程序组件。用包含在MATLAB编译程序中的mbuild应用程序完成C/C++编译和连接两个过程。