数学建模社区-数学中国

标题: matlab生成exe文件(总结) [打印本页]

作者: 我能    时间: 2012-11-2 13:08
标题: matlab生成exe文件(总结)
matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:$ E; a, X: j& T8 ~. n

% L0 z% ]; l2 b$ d
1.Matlab环境设置
要建立独立运行的C应用程序,系统中需要安装MatlabMatlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。, V% [- I$ c0 ]  s8 E$ `* x
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
# E5 i; e* F) \' I6 r  Z
虽然生成的可执行程序可以脱离Matlab环境运行,但是它需要Matlab C/C++数学库文件或者图形库文件的支持才能运行。但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调用,则不仅可以独立与Matlab环境,也不需要那两个库函数的支持。
Matlab Command Window 下输入命令
mbuild – setup
操作过程如下图:
                              
然后输入命令
mex – setup
以类似的方法配置编译器。Matlab 的配置完成。
2.VS环境设置
1)设置Include Library 目录
项目右键->属性->VC++目录->包含目录:添加
<MATLAB>\R2010b\extern\include\win64
<MATLAB>\R2010b\extern\include\
项目右键->属性->VC++目录->库目录:添加
<MATLAB>\R2010b\extern\lib\win32\microsoft
<MATLAB>\R2010b\extern\lib\win64\microsoft
截图(部分):
2)设置工程目录
项目右键->属性->C/C++->常规->附件包含目录:添加
<MATLAB>\R2010b\extern\include\win64
<MATLAB>\R2010b\extern\include\
项目右键->属性->链接器->常规:添加
<MATLAB>\R2010b\extern\lib\win32\microsoft
<MATLAB>\R2010b\extern\lib\win64\microsoft
项目右键->属性->链接器->输入->附件依赖性:添加
libeng.lib- T  t. D9 T- O# K) A' j6 s
libmat.lib
8 |$ g: n4 `6 r  ?1 \libmex.lib7 f1 q2 L1 V+ p3 ^! ?
libmx.lib
  
注:1.lib文件包含在<MATLAB>\R2010b\extern\lib\win64\microsoft,可根据需要增减
2.附件依赖性在VS2010前以空格隔开,在VS2010后使用;隔开。
截图:
项目右键->属性->链接器->高级->目标计算机:更改(只针对64WINDOWS
MachineX86 -> MachineX64
注:分析原因为MATLAB根据计算机平台选择了X64编译环境,如此处不修改会出现 错误3
3)配置管理器设置(只针对64WINDOWS
生成->配置管理器->平台:更改
Win32->X64
注:分析原因为配合链接器中目标计算机的修改,如此处不修改会出现 错误4
截图:
3.系统(Windows)环境设置
我的电脑->属性->高级系统设置->高级->环境变量->Path,添加:
<MATLAB>\R2010b\bin;<MATLAB>\R2010b\extern\lib\win64\microsoft;<MATLAB>\bin\win64
注:1.Windows7的情况下,用户变量系统
变量都需 添加,如不添加,运行时会出现 错误5
2.哈哈,别忘记重启哈,重启后生效
OK!配置就此结束,现在就开始engOpen吧!!对了,别忘记添加#include "engine.h"

" o3 K) _3 Q7 d6 f7 u  ; L9 d0 x( Z8 P: X! b
1.设置编译器:
! c3 u8 C# w- y6 S- x8 l在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:+ t. e9 `/ I- S( e! E& t
Mbuild –setup, 按提示选择matlab自带编译器LCC。; J' J  ^: I# `0 u3 B- R
$ ^  c! V" Q  f% t2 w7 I
2.将脚本编译为可执行文件:. |( h+ R: B1 h( u2 _1 K* v; x
如项目文件包含:gui.m, gui.gif, fun1.m。
- k2 U7 P2 u$ w' V/ R& S- y' q1 X" @1 v" w
在此路径下命令行输入:mcc –m gui.m,生 成:mccExcludedFiles.log,ReadMe.txt,gui.ctf,gui.prj,gui_main.c,gui_mcc_component_data.c,gui.exe。其中:gui.ctf,gui.exe为脱离matlab环境运行必需的文件。
" k% }1 m# ]+ J& B7 h) K# {: g$ e1 a. T8 \: c
3.在未安装matlab的机器上运行可执行程序。# i0 E9 ?1 }9 B& X; L
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。. ~- X- Q' o9 B, i# w# E  ~
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
  `! v$ K# N5 s' \" s3 q4 O# ^4 m! x& u
4.去除独立可执行程序运行时的“DOS黑窗口”。' J2 a$ [8 Z# i4 c$ ~1 h
以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
5 F8 K, k0 P! b  |& U& }3 F
% k9 N% u2 w$ g* S+ B5 O- P5 T4 H& C6 rmatlba命令行输入:3 H) ^# y) P0 ^9 Y0 i- v. t
) Y# w/ [7 h9 t1 O$ g2 @1 L
cd(prefdir)
/ k. D9 p2 z& O  w( |2 v& R( ^edit compopts.bat
) t% v$ F+ f9 d5 J" l7 s0 c# n7 P1 w3 a0 I; Y* v' V% a* \5 M3 V
此时compopts.bat打开,在文件最后添加:
! A7 b+ J' e3 N3 N4 E" s
# y. q6 m# I( k8 Eset LINKFLAGS=%LINKFLAGS% -subsystem windows9 _5 Y& D6 n$ Y5 R" a  e

# f/ B! h. y, G4 }( j如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。( A4 x2 i; K1 [6 U9 r, T

9 U9 ]1 N. i! v7 m5 `另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同( J  W( O- r. k8 S) n
& M7 N0 o" i6 \: @& l6 D
Microsoft Visual C/C++:* H% [9 ^# ]% h  b: s

4 o3 e3 Z+ N2 I+ s( eset LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup5 J. t* f% q- K5 H! N3 ^

" z. B. L& m# m/ VBorland:2 m- Q" I5 F4 |& y
3 G. A9 E: h3 P! T
set LINKFLAGS=%LINKFLAGS% -aa, L( P6 \# ?& ~' v6 j# }" U
———————————————————————————————————————–
! R0 Y3 H- I* W9 F  `+ K! P0 B3 r; K, d
方法一:
- e# _% x7 G6 d" V- h, k已有gui.m文件和gui.fig文件
/ o; j  ^2 {" T: t1 在matlab的command窗口中输入# l* n3 s" g( s4 \2 s
mcc -B sgl GUI.m' J0 ]$ M2 E8 X/ ~# g& m: s
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
& d- |# O' w( k0 Q$ ~* |+ v
: @) P1 n' Q! j2 C此时仍需matlab所必需的动态连接库。2 u( I5 Z/ r3 o: @1 Q6 T
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上7 L/ B" p3 h7 j& Y9 `
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,
/ G9 k) g! v& H其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共2 `# c* j" ^3 R( P  t  p
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。+ S& K: j5 o5 g% }! k. F5 O9 ^
而toolbox目录则必须与应用程序同一目录。
0 P# l  `/ N# v, i7 n8 Z7 ?
) _; ^8 R. B8 f* v5 V- ?- _9 r方法二:! e4 n/ v0 P& c& Q5 n

& U, Q+ ~* D+ d# L1 R3 V) g: amatlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。! S# v; e. X7 O' V# o0 N
) g5 W6 S6 g" N% ]5 s! V+ j+ u9 Z
1. 转化为c/c++程序并编译为.exe( r1 ^% N$ g) V" |1 J5 z" x. t
先验证mcc是否可用,用matlab中的example验证即可) j* y* p; F8 j
建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)* G. O2 H3 U; T3 a4 b$ b3 S
由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure9 D- B  C. r/ e) h+ v
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等. I  |9 \6 y- I( b/ m
程序发布需要.exe、bin\、.fig; D/ u+ p* l* \. Q/ l' E

; H% h& G, a/ U. a) B. D- s2 |2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件
5 F# p! y  r0 F, ^8 D前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
, e  y# X! u2 [7 M  J4 q- g) `9 w另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
( t, P* D/ r3 E
3 s" f5 e7 P' B$ Q$ m2 d& j3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
( b4 h6 @0 N" y) t以下通过注册表自动添加path路径
( k+ A1 q1 E4 U& o( }%————————————————————————————–
& {  C- K8 X% e+ zScreen.Next(); — 进入下一个屏幕
7 P: b. L3 W7 RresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
5 c6 M' g6 [. c" H6 _if (resultDialog == IDYES) then –加入安装路径
$ }+ S: k/ q6 h) J/ ^" PstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);7 |. k" [7 H  e9 O3 h8 W: x/ F
if strPath ~= “” then; ~2 X$ P' p8 x0 S
strPath = String.Concat(strPath, “;”);
2 u, W( E+ z( l, P6 J+ o  i& ~end( `, ~* p( _+ k6 q" ^
strPathToAdd = SessionVar.Expand(“%AppFolder%”);
/ ?4 |% t: H. P- cstrPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);
) m8 S* r, j3 R5 u+ Z) a& W— 如果路径中无该位置,则加入' {) N+ I+ U) s. M3 j, c' t6 ]) T
if String.Find(strPath,strPathToAdd) == -1 then6 t( e0 \2 Z9 o* b0 K* f1 P
strPath = String.Concat(strPath, strPathToAdd);4 S) D  x# I8 \# h- o
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);! i6 k, {( |4 ~4 f: l
end
& N2 K7 `8 S' Rend
2 X- b5 k* D+ m5 m: b  Y%————————————————————————————–
( N9 k( m$ P. a方法三:9 O: F! J( ^( ^
在网上搜了一个方法,还没有用过, 贴在这里仅供参考:) u' P& C) ]# y' e& j" {0 C8 m
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
- p+ y0 O. O- U1 Z& s首先,使用mcc编译得到.exe文件,具体参数见帮助文件;# Y+ r7 R# Q6 l2 L2 x' V2 O+ v# I1 ]
其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件! z$ j  b+ h. A1 V7 B( K5 X7 l
第三,在MATLAB环境,执行命令/ A( J6 C; q- k; C4 e( p. w! {
mcc -m -B sgl file.m
) o$ p8 u/ U% z1 ]$ h  L0 ], l或者 mcc -p -B sglcpp file.m
$ ?! q$ z0 ~4 b+ ~0 y* t" Y+ L请键入help mcc看帮助。- H, A6 Z2 |" u) K7 A
mcc是在“command windows” 用的吗?, X& r# U2 V4 {, M1 a' r$ X
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.0 x* Z' D' X; C- V1 u8 N  v9 {
还有“添加环境变量path”是path到.exe文件的环境中是吧?% n% w# r" S6 g, C7 k; U
9 ?5 P3 f. A0 K' [& B( n
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装
3 V1 P) C6 N3 P6 h! l& d% {; k三、 如何将gui生成exe ?
+ Z& T' k, e, p0 A已有gui.m文件和gui.fig文件! J" f! \" y0 b! N7 m) ^; G8 W
1 在matlab的command窗口中输入
3 H  E4 m/ w( z; q$ u4 kmcc -B sgl GUI.m6 ~5 C5 ^# o5 ^! g/ [- O  y
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器7 B- q) A; L- l% G
此时仍需matlab所必需的动态连接库。7 f, J/ P2 m, B5 i: o+ S( V
3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上
- u! i, b1 M9 k. [) A9 U: T4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
; u' r# F' |3 [' s5.大功告成。
  y( c+ X4 D$ n/ v8 \' M7 k/ e% }- G# [# t- S% `
外一篇:MATLAB M文件变exe文件3 C; i, h, V1 v8 H; w+ P+ V* ~
我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序
# [+ \  v$ ~# x! T" G希望这些对你有用
' B* m4 ~8 X, p, l1 E9 ]8 p0 E" u* q3 e+ y
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:$ h% M" o: }' w! a
, l$ i: M6 X6 L5 A( p
一、生成独立可执行的程序(exe文件)步骤
) h2 J9 v; F' W( c2 C  G! c0 X! `3 P" t1 L6 Q% Q6 L7 l
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。9 @: y1 g; p( L, ^  f
2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
0 _5 x; [$ ?1 @$ |& j3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。! C+ ?! h' j$ l
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
# H; W' S5 a6 M# T7 I3 Y& Q. }注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
- Q& \* d/ n$ F+ E3 M$ u4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。6 r* |9 X( T; X+ `" z0 I/ d# [" R

+ g6 N6 k/ R( n) Y, b! _二、脱离matlab运行可执行程序
% R6 Z4 T) X. S& nMCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:1 j  x$ n) ~9 I5 n/ d
\toolbox\compiler\deploy\win32
6 w. W8 N, S( r$ X' h文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。/ C3 w$ ^6 m. h4 Q6 ]2 }
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。
0 P2 j7 x3 D+ Q8 {. N5 {$ A% `在其它没有安装matlab的机器上运行exe文件前:
+ M1 ^) x2 Y$ i, n  l. J8 ~首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。+ A3 z; Z  a$ o* t6 R
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。
1 F  i9 f8 Y0 [5 a1 L# P如果没有,也可手动安装,添加的方法是:
* V% l! ]3 {# {" ]. P( O) _右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
/ u  L* D+ b, b) b; E1 G4 z注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
, p0 b( d- B. T! T最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。. F: l+ q' M$ M! b/ N( I
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。3 q5 P+ j  v! A' [
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:- Y6 @$ Q* ~( g) E3 N4 L
9 w3 k- c. \; {5 ~& n2 w
消除运行MATLAB生成的exe程序的dos黑屏的办法' X9 J2 r6 W# B- ]3 n6 |+ r
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:
) D9 \+ m/ w3 d8 ~: e4 W- m方法一: 在命令窗口输入:
4 v( B$ z, e& Mcd(prefdir)
' r- U! p) N2 R* Medit compopts.bat
! p% ~+ A* x3 \, K3 U在打开的文件最后添加以下语句:
, I& I. a' q2 O2 M$ c5 ^4 {
$ ?) G( T9 s2 hA.VC环境下:
. N. v8 x. M8 z9 B. p1 a/ q6 |( e$ \$ A  V  s
set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup , L/ z- e3 y+ D
7 A. S+ I4 B# ~) Q" A4 u
B.LCC环境下:8 |0 P" d7 E7 }6 H# k' m2 B
set LINKFLAGS=%LINKFLAGS% -subsystemwindows
- V! ]1 M; I% i2 R8 e3 Z! q; S& e% g5 C) b0 n; g& M
C. Borland:: U, Q( @1 u( o- @
set LINKFLAGS=%LINKFLAGS% -aa8 ]* m: Q: m; f

: j* a% V! W( N保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
# b  N: N. V* b! U/ ~  L7 G: \7 w
0 @1 ]! C8 ]5 }. \" L" z1 n方法二:使用suppress工具:) |1 Q. ?$ w, G* k; `/ w
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
" z8 I- c5 i7 }- O: p  g" A3 @2 C' i. R4 T
其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。
+ n7 i' r4 D" e( t/ L. V方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
0 q& ^6 q* m( G6 U- h; b
作者: jonejack11    时间: 2013-6-4 00:45
太复杂了,没看明白
作者: pcyaoqiang    时间: 2013-7-12 16:00
支持一下啊!!
作者: eagle1208    时间: 2013-7-20 14:48





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5