将Matlab的M文件转为P文件和exe可执行文件达到加密效果

本文介绍了两种Matlab代码加密方式:生成p文件和生成.exe文件。生成p文件操作简便,适用于内部分享,但需在Matlab环境下运行。生成.exe文件则可脱离Matlab独立运行,适合分发给没有Matlab环境的用户。

在matlab中如果你的代码很重要,需要加密,目前我查到了两种方法:一、生成p文件;二、生成.exe文件
matlab生成p文件的方法很简单,在command wondow里面用
pcode yourfile.m
命令可以将M文件转化为对应的pcode文件yourfile.p,据说是不会被反编译的。
一、生成p文件
P文件是对应M文件的一种预解析版本(preparsed version)。因为当你第一次执行M文件时,Matlab需要将其解析(parse)一次(第一次执行后的已解析内容会放入内存作第二次执行时使用, 即第二次执行时无需再解析),这无形中增加了执行时间。所以我们就预先作解释,那么以后再使用该M文件时,便会直接执行对应的已解析版本,即P文件。但又 因为Matlab的解析速度非常快,一般不用自己作预解析。只有当一些程序要调用到非常多的M文件时,如GUI应用程序时,才会作预解析,以增加以后的调 用速度。
如Matlab的当前目录(Current Directory)有test.m文件,其中a=1,b=2,作预解析后,又有test.p文件。因为P文件的调用优先级比M文件要高,所以当你调用test时,会作优先选 择而调用了test.p。
可以修改test.m的代码为:
% ----------------------
% test.m
a = 3;
b = 4;
% ----------------------
再在Command Window里调用test:
>> test
Warning: P-file C:\Program Files\MATLAB71\work\test.p is older than M-file C:\Program Files\MATLAB71\work\test.m.
C:\Program Files\MATLAB71\work\test.p may be obsolete and may need to be regenerated.
Type "help pcode" for information about generating P-files from M-files.
会出现一个Warning,警告你所调用的P文件比同名的M文件要旧,即表示M文件已被修改了。尽管 如此,调用的还是旧的P文件,即得出a = 1和 b = 2。
P文件可以用来作保密代码之用,如果你给别人一个M文件,别人可以打开来看到你所 有的代码和算法。如果你的代码不想被别人看到,那可以给他P文件。
pcode函数也可以应用在M函数文件。
p文件是加密文件,只能运行,不能还原成m文件的。
二、生成.exe文件加密
他的缺点是不能够脱离Matlab单独运行,必须还在command window里面调用,可移植性不强。如果生成.exe文件就可以解决这个问题。
生成.exe文件的方法稍微复杂点:
1、首先要保证你的程序是函数型的,而不是脚本形式的。如果是脚本形式的也不要紧,只需要在脚本文件第一行添加 function []=name()即可。
2、然后,在command window里用mcc -m -B    sgl file.m命令生成.exe文件,期间会让你选择编译器(我的是VC6.0),会发现生成了一堆文件。
3、将上步生成的那一堆文件一起拷到待运行的机器。此时仍需matlab所必需的动态连接库。将 <matlab path >/extern/lib/win32/mglinstallar.exe拷贝到到待运行机器上。
4.在待运行的机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有n个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下(我把它拷在应用程序目录下了)。而toolbox目录则必须与应用程序同一目录。
5.大功告成,双击.exe即可运行了。

总结:两种方法都可以达到保护源代码的目的,但是各有各的优缺点。生成p文件的优点是方法简单,生成文件大小只是源代码的3倍左右,缺点是不能脱离matlab环境运行。生成.exe文件的优点是可以脱离matlab单独运行,缺点是生成的文件大小是原来的几千倍(5555555555,当然包含那些.dll文件,体积最庞大的一部分)。就拿我的程序做个比较,源码是8.34K,生成p文件22.6K,生成可执行文件(含那些.dll)共30多兆。

参考资料:

1、MATLAB p-code如何打开

2、对于MATLAB M文件怎么加密



<think>好的,我需要帮助用户将MATLAB的.m文件编译为可执行文件exe。首先,我应该回顾一下用户提供的引用内容,看看有哪些关键步骤方法。根据引用3,用户需要先配置MATLAB的编译器,使用mex -setup命令,然后选择合适的编译器。接着,使用mcc命令进行编译,例如mcc -m filename.m。不过用户提到生成exe文件时可能会有DOS黑框的问题,引用2指出可以通过一些方法去除黑框,比如使用-Wmain或修改代码,或者添加编译选项。此外,引用4提到了加密方法,比如转为P文件,但用户主要需求是生成exe,所以可能暂时不需要这部分。 接下来,我需要将这些步骤整理成清晰的流程,确保用户能够一步步操作。首先检查编译器是否安装,比如需要安装MATLAB Compiler SDK,或者第三方编译器如MicrosoftVisual Studio。然后配置编译器,再使用mcc命令编译。需要注意不同MATLAB版本可能需要的不同选项,比如R2017b之后可能需要使用-R-nojvm来避免DOS窗口。另外,用户可能遇到的常见问题,比如生成的黑框如何去除,需要给出解决方案。还有,生成的exe需要MATLAB Runtime环境,用户可能需要知道如何打包或分发运行时。此外,加密保护代码的方法,如转为P文件,也是用户可能关心的点,可以简要提及。最后,生成相关问题,帮助用户深入理解,比如性能优化、加密方法、依赖处理等。确保回答结构清晰,分步骤说明,并包含注意事项常见问题解决,这样用户能顺利完成任务。</think>### 如何将MATLAB的.m文件编译为可执行文件.exe? 以下是详细步骤及注意事项: --- #### **1. 环境准备** - **安装MATLAB编译器** 确保已安装 **MATLAB Compiler™** 或 **MATLAB Compiler SDK™**(需MATLAB许可证支持)。 - **安装第三方编译器** 如Microsoft Visual Studio或MinGW(需与MATLAB版本兼容),可通过MATLAB命令查看支持的编译器列表: ```matlab mex -setup ``` --- #### **2. 配置编译器** 在MATLAB命令行中执行: ```matlab mex -setup ``` 选择已安装的C/C++编译器(如Microsoft Visual C++ 2022)[^3]。 --- #### **3. 编译.m文件为.exe** 使用`mcc`命令编译目标文件,例如: ```matlab mcc -m filename.m ``` - **参数说明** `-m`:生成独立可执行文件; `-e`:生成无需MATLAB环境的exe(需Runtime支持)[^3]。 --- #### **4. 处理运行依赖** - **MATLAB Runtime环境** 生成的exe需依赖 **MATLAB Runtime**,可通过以下方式分发: 1. 提示用户自行下载安装对应版本的Runtime; 2. 使用`-a`参数打包附加文件(如数据或函数)[^3]。 - **静默运行(去除DOS黑框)** 添加编译选项`-R -nojvm`或修改代码隐藏输出窗口[^2]: ```matlab % 在.m文件开头添加: if ~isdeployed desktop; end ``` --- #### **5. 加密代码(可选)** - **转为.p文件** 使用`pcode`命令将敏感代码加密为.p文件: ```matlab pcode filename.m ``` - **编译时引用.p文件** 确保编译命令包含.p文件路径[^4]。 --- #### **6. 测试与分发** - **测试exe** 双击生成的`filename.exe`或在命令行执行: ```bash filename.exe ``` - **打包Runtime** 使用`mcrinstaller`工具生成Runtime安装包,与exe一同分发。 --- #### **注意事项** 1. **MATLAB版本兼容性** exe需与目标系统的MATLAB Runtime版本一致。 2. **图形界面处理** 若代码包含GUI(如`figure`),需确保编译时包含图形库支持(`-B sgl`)[^3]。 3. **性能优化** 避免在循环中频繁调用外部函数,可预加载数据或使用`coder`工具加速。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值