主要有两种方式实现matlab程序的加密和代码的加速
1. pcode命令
· P文件是对应M文件的一种预解析版本(preparsed version)。因为当你第一次执行M文件时,Matlab需要将其解析(parse)一次(第一次执行后的已解析内容会放入内存作第二次执行时使用,即第二次执行时无需再解析),这无形中增加了执行时间。所以我们就预先作解释,那么以后再使用该M文件时,便会直接执行对应的已解析版本,即P文件。但又因为Matlab的解析速度非常快,一般不用自己作预解析。只有当一些程序要调用到非常多的M文件时,如GUI应用程序时,才会作预解析,以增加以后的调用速度。
· P文件可以用来作保密代码之用,如果你给别人一个M文件,别人可以打开来看到你所有的代码和算法。如果你的代码不想被别人看到,那可以给他P文件。
· pcode函数也可以应用在M函数文件.
>>pcodefilename.m 将filename的m存储为p文件
>>pcode dir/*.m 将路径dir下的所有m文件转换为p文件,也可用pcode dir
缺点是不能够脱离Matlab单独运行,必须还在command window里面调用,可移植性不强。
2. 生成.exe可执行文件,可独立MATLAB环境运行
a.将MATLAB当前目录设置至需要M程序所在的路径;
b.在命令窗口Commandwindow 输入 Mbuild –setup 选择编译器对程序进行编译:
(1)当出现Would youlike mbuild to locate installed compilers [y]/n? 输入 y
(2) 出现 Select acompiler:
[1] Lcc C version2.4.1 in D:\PROGRAM FILES\MATLAB71\sys\lcc
[2] MicrosoftVisual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio
[0] None
Compiler:
输入 1,选MATLAB自带的编译器进行编译。
(3)出现Compiler: LccC 2.4.1
Location:D:\PROGRAM FILES\MATLAB71\sys\lcc
Are thesecorrect?([y]/n): 输入 y
(4) 出现DllRegisterServer in D:\ProgramFiles\MATLAB71\bin\win32\mwcommgr.dll succeeded
显示编译成功
c.在命令窗口输入mcc –m welcome 需注意 welcome 为程序中的主程序名称,若主程序为main.m 则输入mcc –m welcome 默认生成 welcome.exe可执行文件。
d.若需要在没安装MATLAB机器上运行welcome.exe,需要进行M文件编译机器上的MCRinstaller.exe与(MATLAB 安装目录下MATLAB7.1\toolbox\compiler\deploy\win32)编译生成的相相关文件一起拷贝至待运行机器中。接着点击运行MCRinstaller.exe安装运行welcome.exe的基本编译环境,其次是要将MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,具体添加的方法是:右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
e.点击welcome.exe运行。MATLAB程序生成可执行文件,并在未安装MATLAB机器上运行成功。
辅助事项:
(1) 在生成可执行文件时出现问题:可能的原因是本机环境或自身操作出现问题,若仍无法解决,可考虑换台机器进行编译和可执行文件生成。(个人就是在exe生成时出现这样那样的问题,仍无法解决,最后换台机器成功生成,目前本机出现的原因仍未解决 :))
(2) 在新机器上运行时出现问题:可能的原因是exe可执行文件只打包.m和.fig文件,如果在整个程序运行过程中调用了外部数据,需要将外部数据与编译生成的文件同时拷贝,才能成功运行。
(3) 在用MATLAB LCC编译器生成可执行文件时将出现DOS的黑色窗口,如果想去除需要安装VC进行编译,网上有相关的资料参考
总结:两种方法都可以达到保护源代码的目的,但是各有各的优缺点。生成p文件的优点是方法简单,生成文件大小只是源代码的3倍左右,缺点是不能脱离matlab环境运行。生成.exe文件的优点是可以脱离matlab单独运行,缺点是生成的文件大小是原来的几千倍(当然包含那些.dll文件,体积最庞大的一部分)。