数学建模社区-数学中国

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

作者: 我能    时间: 2012-11-2 13:08
标题: matlab生成exe文件(总结)
matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:% {- f) {# ?) A3 g% j* O* s
. D5 N1 V8 b: x. l# L/ f
1.Matlab环境设置
要建立独立运行的C应用程序,系统中需要安装MatlabMatlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。7 O5 o( x: J: L
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。! E$ @' e$ |1 U
虽然生成的可执行程序可以脱离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.lib5 t. ]. B" P7 @2 f  e1 o6 C
libmat.lib4 e# {9 V) I5 D) Q/ b
libmex.lib
4 K5 Z* d" H6 k0 Mlibmx.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"
! ]7 c/ @6 U& t! y" g
  + W' W3 u4 b4 l8 e
1.设置编译器:
& F: r0 ^7 h, Q% _0 S/ ^9 o' s在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:6 D' ~! _# S: Z. ^5 M2 r" g
Mbuild –setup, 按提示选择matlab自带编译器LCC。& i8 ?8 g& g5 ~

8 f& [/ w  i) @  F2.将脚本编译为可执行文件:
2 ?+ H& l& q/ L3 u. `如项目文件包含:gui.m, gui.gif, fun1.m。) }) C& A0 ~+ J% f0 s% @3 ^
& z, j$ b! a  _# g( f9 T
在此路径下命令行输入: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环境运行必需的文件。
* i7 Z: ~# m  n5 X0 y
/ s: X1 {5 p6 r& r( ^3.在未安装matlab的机器上运行可执行程序。
( f( z3 b( H9 y1 c5 U9 g( T% h将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。  a( k0 h% y) ]
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
( b2 |: s$ D. Q) ?1 [8 _$ [: B7 I7 i9 F$ ?$ B* Z
4.去除独立可执行程序运行时的“DOS黑窗口”。+ J$ e$ z9 k( Y. t1 M, C7 [
以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
6 w0 g$ ]! p, o& Y1 w4 O8 J$ G1 |6 o4 [/ A1 i" r2 [
matlba命令行输入:
2 B8 u$ {, K' m. v4 ~1 G; e
" H0 B* Y$ i, y+ ucd(prefdir)
0 C$ Q# u$ [: i/ i9 }edit compopts.bat4 b) O( q+ q6 X
4 Q, w( F6 K$ p! `4 o. z1 L6 C' r6 ^- E
此时compopts.bat打开,在文件最后添加:' M  N- _: ]- Y8 [

  e1 k/ o$ i7 _$ Q) b' i2 b' k1 jset LINKFLAGS=%LINKFLAGS% -subsystem windows' E8 w* B3 k7 O, N8 j# {

3 ^& y1 p! `$ j如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。
# |0 b/ h5 @8 _- f  y6 M* {+ J. b( s1 G7 g2 g0 h
另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
' d" e" A5 l( L; }" u, m5 G
  a, z, ?2 n8 W6 vMicrosoft Visual C/C++:
+ S, v2 C7 A% y* z: O1 M. t2 i$ M, |' o. ?0 G% n5 H: U) X
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
( ]; e2 [+ m2 q6 ~! G% ^
& @! y& X+ j1 f, T5 ^: Y* OBorland:% m+ ]* ]( ~7 n3 f4 ~0 l

( B. }& k4 W7 U5 jset LINKFLAGS=%LINKFLAGS% -aa% B5 F, z. I! B8 T
———————————————————————————————————————–
0 g) S- g+ i) L* w5 Z7 ^, }$ b9 G$ z3 x7 |4 d: O
方法一:
6 U7 m: I# j( X, A已有gui.m文件和gui.fig文件: ]/ U' t5 g6 l
1 在matlab的command窗口中输入6 |  l1 J7 Y6 u4 g; H" b: ?
mcc -B sgl GUI.m
% B" U+ q# H2 C7 F2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
+ Y+ k5 o" _' f9 L3 k& u: G9 P+ n! [: `& @% G7 c  `3 b
此时仍需matlab所必需的动态连接库。% n7 l: M. s/ y' E. }% H/ h0 o$ s5 {
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
9 V# l+ m& \: \& ^$ ~+ m0 w4 O! a4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,
4 P! r4 c0 _. ~" h2 a" S其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共+ \( g9 f. Q" I" X1 C) B
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。" H& T+ \9 F$ E: v" L
而toolbox目录则必须与应用程序同一目录。1 M# f% x2 U* F! F* ]% r% u/ K
& m4 L  Y& a8 A" P3 W
方法二:
3 R6 g& n* y& T/ b5 ?; u% D8 [: s
! }& E" i. S. h2 s. `5 K* O3 nmatlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
( m3 p$ W3 [" Z
2 U3 V8 I  V  A1 W+ Y1. 转化为c/c++程序并编译为.exe# N5 ?( l: I5 A* A" c
先验证mcc是否可用,用matlab中的example验证即可
+ M) V; |% T, M1 D4 {  [9 x/ v建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装); B) t" S( g7 V% Z! R6 {+ K$ i
由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
/ a' g$ X; B6 V, P' {7 q# V编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等7 @' @. ]" @& H6 A% d3 A/ a0 B; [0 f
程序发布需要.exe、bin\、.fig6 A0 f) @. R! w0 `8 [1 v, i
8 r6 N+ y5 l! m
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件* [% j7 [) _- F. S0 \
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径! ^0 i: }- R1 |4 k( f
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
! {0 n, g, p% \% r# R  J
; _) [, g  P) S1 F) E3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
( O& D' M) @% `以下通过注册表自动添加path路径% J! m% t& ]- P) N' `/ J7 b
%————————————————————————————–& n' d. }$ o3 H) p% U
Screen.Next(); — 进入下一个屏幕
5 O! p0 v! v7 yresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);3 D% P4 @# q3 Y, V4 |. E8 _- ~0 u
if (resultDialog == IDYES) then –加入安装路径. d% N  |- Z; j; I
strPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);
5 a3 o, J, M' a4 O; p1 [/ e if strPath ~= “” then2 h+ j- `4 O, q
strPath = String.Concat(strPath, “;”);9 a- A) y/ |) d$ ~, W6 R
end
$ I- N' b; ?# d5 @! g2 E; [" W' D' o strPathToAdd = SessionVar.Expand(“%AppFolder%”);0 [" B" q* ?1 I. C! {
strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);
3 r0 b, m% v# x! S— 如果路径中无该位置,则加入
" D3 N, U% K' y* j. Hif String.Find(strPath,strPathToAdd) == -1 then
0 i# n' d1 g0 x) b" R strPath = String.Concat(strPath, strPathToAdd);/ B/ e+ Q; f8 N3 i0 P- |* S
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
" H6 Q3 [* t. ? end
6 x+ x# h# A4 z) i5 n$ ]end( t6 }. B8 p( k) f. l1 s' q; y
%————————————————————————————–
; ?* B# C3 P1 N1 `/ k4 f/ i; \: D' P方法三:( g1 q$ Y7 l0 d3 b( g! s* f( u
在网上搜了一个方法,还没有用过, 贴在这里仅供参考:% v7 [7 Y. e( w, D3 t2 {. W
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
/ P# ]9 w/ k! a/ J" O7 r首先,使用mcc编译得到.exe文件,具体参数见帮助文件;! ^) h3 `5 p8 q; F1 @
其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
7 a- f4 O( N% a" `% O% d! h% n6 q第三,在MATLAB环境,执行命令
4 B2 J) `# f- I" \% y' S0 t3 R4 q" ymcc -m -B sgl file.m
# F& N- U' k1 j/ I2 Q或者 mcc -p -B sglcpp file.m
4 ?& I! e* i/ \1 B; ^: E" Y; L' A2 v$ m请键入help mcc看帮助。
0 l+ T1 }5 @, x( B0 I4 A8 P" m. Pmcc是在“command windows” 用的吗?
# E! `7 a, h7 e只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.
( T' x0 h  m& ?# o还有“添加环境变量path”是path到.exe文件的环境中是吧?
; _2 ?# C1 I' e& x; [  r# F; m. S7 N2 m' y
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装3 ~- W" P2 W( T$ t! j+ p
三、 如何将gui生成exe ?
9 I7 e- `0 Q6 W% S2 \( T已有gui.m文件和gui.fig文件
9 p! Z3 ~( S" k( w1 在matlab的command窗口中输入2 @$ h5 s* R" h$ {  x1 [
mcc -B sgl GUI.m
+ y$ [2 b0 \5 j7 X1 |/ |5 G* G$ _) N- {3 c2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器* {* B( p( x) [" I' q8 v* W0 P
此时仍需matlab所必需的动态连接库。
- j% l5 ^5 C# P* ~1 i' g' u. E3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上& s- x/ K5 K$ \3 z
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
( Z; X' @1 |9 w5.大功告成。 4 n7 h' q/ r# Z4 J! Z% `- e& E

- u& M. X2 h2 F, m% e2 P' F4 K外一篇:MATLAB M文件变exe文件# ^' m+ G' q& t& W
我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序8 D+ U, @8 a" d) P
希望这些对你有用
* _; d" h& t  M) F% Q/ R  ^6 Q+ f  a* U! r2 L
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:: S- ]7 L5 K. t
, S* L0 `/ j9 t1 |; O+ W( R* Y: {
一、生成独立可执行的程序(exe文件)步骤
" X5 r2 d- N+ x/ ^7 p- p, z% k* R/ X. L- G, c, ~4 a- n
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
* b- Y% G8 f. a2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
0 p) Y% ~' d1 @, i! G: @. V3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。2 h+ t- i7 `0 V+ }/ K5 o5 t: k
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
" I0 j9 o& V! W* S: z注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;% i2 k7 Y4 v: N4 I% |& w0 S) W0 \
4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。6 M0 @1 H" Y8 O1 J5 m! y2 [2 M4 h

) Q( ^: h7 m& g二、脱离matlab运行可执行程序2 ?; p8 o- j: p& f: N: s1 c
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
2 z) `3 N5 u" R- ~2 H- Z \toolbox\compiler\deploy\win32
* q- |5 @+ \& F4 Q2 @( J" ~文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。3 w9 u7 `& ]+ x, ]# u2 ~
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。2 x2 X: c* g6 X; {
在其它没有安装matlab的机器上运行exe文件前:
' |" y# V( R* `5 b首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。! o$ r' j% D, a! J; }; a8 d/ q; ~
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。4 c+ `3 G4 w7 r* [% p
如果没有,也可手动安装,添加的方法是:4 B7 i3 S+ `# q5 i6 N" M" X  r: ^
右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。& j- T# l0 z6 _) `# ]5 n
注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
: Y/ g! M/ j9 K( M# h# U最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
+ b6 p7 q1 z: A' J3 \/ v问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。
, |& {0 b7 L/ Q: A, ?' _美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
) W# r. P( o! ?- e
0 `. p6 Z% ^- v5 l6 D) m& _$ t消除运行MATLAB生成的exe程序的dos黑屏的办法
2 {/ ~% z1 C8 T6 r基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:
! V8 @; i* Z5 f* I; E+ B* g% C方法一: 在命令窗口输入:
7 L0 r+ c5 F* d4 @) E6 J( G( _# Z4 Zcd(prefdir)
9 j: t) ?5 I" }1 w: E4 @/ yedit compopts.bat  n  ]8 T& u- R6 Y5 ~' e
在打开的文件最后添加以下语句:
- J8 `' z/ R5 F$ I. h$ X
+ l. L% P* }6 P; O( I9 _, u1 \7 _A.VC环境下:
% d0 Z8 {/ V1 J5 v
4 N! m( |6 u$ |/ k/ ]9 Gset LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup $ a9 y( H9 |1 |& v8 o; F
+ x$ I" t: K! T, S/ g0 o, A1 ?" y7 W+ T
B.LCC环境下:
' K9 n' w6 U( u' o* [3 N- Aset LINKFLAGS=%LINKFLAGS% -subsystemwindows
. c' s5 _; N7 `) W! p( H0 i$ Z; q5 ~
C. Borland:
' S" {) R0 b+ Z) r! q set LINKFLAGS=%LINKFLAGS% -aa" O+ j& ]* Z' n. m. h

4 ?3 l( Y  j! n2 T保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了* m, o3 I- r0 J) e) @

) _8 `! S+ k8 l: P8 [方法二:使用suppress工具:# R& K; ?# y8 {2 ~! N0 s
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。4 J6 f' E: i7 C) G) ^
, M/ m5 K% G; A9 ]' L
其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。  v2 t5 {; Z& ?0 r/ H( e
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。# l* Y$ r# s7 x! E

作者: 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