MATLAB学习之旅(二)MATLAB M文件变exe文件

来源:互联网 发布:南宁直销软件价格 编辑:程序博客网 时间:2024/06/05 13:26

 转载请标明:

http://blog.csdn.net/chenyujing1234

 

参考文章:

http://blog.sina.com.cn/s/blog_4f0fc2700100moj2.html

 

一、生成独立可执行的程序(exe文件)

步骤

1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2005实现。

MATLAB编译器
1、产生C源码,并进而生成MEX文件。这种MEX文件的优点是:一,当程序变量为实数,或向量化程度较低,或含有循环结构时,采用该法可提高运行速度;二,与ASCII码的M文件不同,MEX文件采用二进制代码生成,能更好地隐藏文件算法,使之免遭非法修改。
2、产生C或C++源码,以便与其他C/C++模块结合行成独立的外部应用程序。运行所产生的应用程序,无需MATLAB环境的支持,但是往往需要MATLAB提供的C/C++数学库;如果调用了MATLAB绘图指令,则还需要MATLAB提供的C/C++图形库
3、产生C MEX的S函数,与Simulink配合使用,以提高S-函数的运行速度
4、产生C 共享库(动态链接库)或C++静态库,他们的使用无需MATLAB环境的支撑,但是需要MATLAB的数学库
局限性
1、无法编译脚本文件
2、不支持用户自定义对象
3、不支持eval,input,inline等函数
4、不支持的MATLAB的Java接口

 

2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。

>> mbuild -setupPlease choose your compiler for building standalone MATLAB applications:  Would you like mbuild to locate installed compilers [y]/n? y Select a compiler: [1] Lcc C version 2.4 in D:\MATLAB701\sys\lcc [2] Microsoft Visual C/C++ version 7.0 in C:\Program Files\Microsoft Visual Studio .NET [3] Microsoft Visual C/C++ version 6.0 in D:\Microsoft Visual Studio  [0] None  Compiler: 2 Please verify your choices:  Compiler: Microsoft Visual C/C++ 7.0 Location: C:\Program Files\Microsoft Visual Studio .NET  Are these correct?([y]/n): y Try to update options file: C:\Documents and Settings\Administrator\Application Data\MathWorks\MATLAB\R14\compopts.bat From template:              D:\MATLAB701\BIN\WIN32\mbuildopts\msvc70compp.bat  Done . . .   --> "D:\MATLAB701\bin\win32\mwregsvr D:\MATLAB701\bin\win32\mwcomutil.dll"  DllRegisterServer in D:\MATLAB701\bin\win32\mwcomutil.dll succeeded  --> "D:\MATLAB701\bin\win32\mwregsvr D:\MATLAB701\bin\win32\mwcommgr.dll"  DllRegisterServer in D:\MATLAB701\bin\win32\mwcommgr.dll succeeded  >> 


 

 3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。

在命令窗口输入deploytool即可看到。具体使用方法请Help。当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;

注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -m filaname;

M脚本文件不能直接被MATLAB编译器所编译,解决方案:先把脚本M文件改写成函数M文件,然后再对这函数文件进行编译。下面通过举例进行阐述
例:有一个绘图的M脚本文件circle.m如下。希望获得一个MEX绘图程序,
(1)原始的绘图脚本文件
[ex5_2.m]
t=0:0.1:2*pi;
x=t.*sin(3*t);
y=t.*sin(t).*sin(t);
plot(x,y);
(2)对这些脚本文件直接编译将因错误而失败
>> mcc -m ex5_2
 
  To get started, type one of these: helpwin, helpdesk, or demo.
  For product information, visit
www.mathworks.com.
 
Error: File "ex5_2" is a script M-file and cannot be compiled with the current Compiler.
??? Error executing mcc, return status = 1.

(3)把脚本文件改写成函数文件
改写方法之一:在原始脚本文件最前面,加一行function circle_f(r).
 具体如下:
[ex5_2.m]
function circle_f(r)
t=0:0.1:2*pi;
x=t.*sin(3*t);
y=t.*sin(t).*sin(t);
plot(x,y);
(4) 再对ex5_2m进行编译,将顺利进行通过.

>> mcc -m ex5_2    To get started, type one of these: helpwin, helpdesk, or demo.   For product information, visit www.mathworks.com.   >>

生成了以下文件:

其中

ex5_2.ctf  ex5_2.exe是运行时必须的文件。


 

4 在未安装matlab的机器上运行可执行程序。


将D:\MATLAB701\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。

将2中生成的ex5_2.ctf  ex5_2.exe拷贝到该计算机同一路径。运行ex5_2.exe将生成ex5_2_mcr文件夹,包含程序运行所需的库。至此完成。

 

5   去除独立可执行程序运行时的“DOS黑窗口”。


以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。


matlba命令行输入:


cd(prefdir) 

edit compopts.bat


此时compopts.bat打开,在文件最后添加:


set LINKFLAGS=%LINKFLAGS% -subsystem windows 


如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。


另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同


Microsoft Visual C/C++: 


set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup


Borland: 


set LINKFLAGS=%LINKFLAGS% -aa