数学建模社区-数学中国
标题: matlab生成exe文件(总结) [打印本页]
作者: 我能 时间: 2012-11-2 13:08
标题: matlab生成exe文件(总结)
matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:
/ \9 u$ E; w" s# E& A' r& q
6 n% L4 B5 o8 P1 O: K1.Matlab环境设置
要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
3 Q& q+ A$ H% f! `) Z; g8 G% jMatlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
3 V N9 m2 `3 H) k( @" N+ h: D2 r虽然生成的可执行程序可以脱离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.lib4 x4 B0 e0 f, b- q/ [! Y
libmat.lib
! {3 Y. f) m- Wlibmex.lib& {) Q9 T1 O/ N2 G
libmx.lib
注:1.lib文件包含在<MATLAB>\R2010b\extern\lib\win64\microsoft,可根据需要增减
2.附件依赖性在VS2010前以空格隔开,在VS2010后使用;隔开。
截图:
项目右键->属性->链接器->高级->目标计算机:更改(只针对64位WINDOWS)
MachineX86 -> MachineX64
注:分析原因为MATLAB根据计算机平台选择了X64编译环境,如此处不修改会出现 错误3
(3)配置管理器设置(只针对64位WINDOWS)
生成->配置管理器->平台:更改
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"。
# E* d) o; s8 X1 |# @
0 ~5 ~( p( ]( h8 E' J# z6 X) s2 y8 O/ _1.设置编译器:( U7 R) M' s( @( E% \7 z5 l
在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
9 F" B3 {( Q7 V5 ]/ ~* {: U1 XMbuild –setup, 按提示选择matlab自带编译器LCC。
7 ?. [8 z* e# \
$ J5 z& L! f% E9 E9 w' [2.将脚本编译为可执行文件:' L" ]& Z$ o2 F
如项目文件包含:gui.m, gui.gif, fun1.m。
. j" q8 h4 |- v
# d2 C6 L. ~* C; W( u) t6 l6 e在此路径下命令行输入: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环境运行必需的文件。
1 K7 k4 g ?$ Y; q7 I$ h
* j6 X2 l, B- d( |' Z1 D; M3.在未安装matlab的机器上运行可执行程序。/ h' D7 K$ Z, R& |! j
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。
- [3 \) \6 ]' r0 q将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。4 v+ r5 x9 W* t6 F
1 P" K4 N N( G. k* |/ Z" Z
4.去除独立可执行程序运行时的“DOS黑窗口”。, K5 w+ {! f. ]8 y
以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。9 T( a" z' e9 M5 X
# o Y- G6 o9 u2 `" E5 Pmatlba命令行输入:6 {: f$ L& a; O& I
% L& W3 ~2 e) k' @ w% Bcd(prefdir). k F; N/ j: E# Z: u3 A9 k& Y6 l
edit compopts.bat4 k& N: G# M9 n6 |
5 S! m1 Y+ I3 Q8 ]2 i此时compopts.bat打开,在文件最后添加:
1 m+ I- Z! b) k( ^$ K! n9 s1 W' D j W3 |
set LINKFLAGS=%LINKFLAGS% -subsystem windows
8 c$ Y4 P% n% e U8 t G; Q$ ]- [0 F. Z- X& C; _# j
如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。
2 N3 \# p& o) I5 Q) I: t# \$ I
( X4 L# E! t' {8 w/ W3 v! @9 w另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
+ ?% x7 O! U% c' \# z
5 A. Q2 y, t+ BMicrosoft Visual C/C++:! y0 F/ T, s T1 ?: E
- p8 N! v, O& u9 Q% X+ e( bset LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup+ ^5 W% U, S3 T+ L! g+ F1 y; m" C
4 m r+ V; v" d# M! D+ {8 v, z" K
Borland:' a0 ~, E! f# W& m8 p. ?
5 W' { m' i3 U3 y% l4 y m
set LINKFLAGS=%LINKFLAGS% -aa1 E V/ B5 B N4 Q" f, f; A
———————————————————————————————————————–( d p8 S2 C6 T
" \: g! `$ p: J1 z" U方法一:/ U' m/ g& l% ^5 f
已有gui.m文件和gui.fig文件
: b6 ]! A: m/ D: c1 在matlab的command窗口中输入
7 o! c0 O2 {: E( i, W, k1 Q: \1 wmcc -B sgl GUI.m
) h9 k# r: }7 F3 \2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器3 n4 ^$ w% t3 P3 g. S
/ s: d' Q$ S* w此时仍需matlab所必需的动态连接库。7 `& g9 z. T$ I1 ]9 F
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
) l; }1 A; Y# X- a4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,( Q' g$ x) u0 a2 `5 u3 P' }
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共0 L) K+ s% Y# u
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
( ]6 Y5 @8 L. p7 h3 M$ `/ H而toolbox目录则必须与应用程序同一目录。
7 @# H: ]' Y. }* o: m
& B0 q+ h# v( }. H方法二:
1 X/ v$ B! M" g& t& g" L O% J; C$ I. b/ m
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
: K* t) A' t5 |9 i' k1 I" @4 l" o+ c2 v0 t4 K% g( g
1. 转化为c/c++程序并编译为.exe
" F/ m/ h7 O7 W1 G) y" W, Q. i先验证mcc是否可用,用matlab中的example验证即可
* U% p/ F7 T' o; |% C/ J建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
& D$ f/ r/ |' i% I) C; F3 f4 W+ |! c由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
( ^8 G; M& n, E2 h" W& G编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等: N2 s! I6 W. ?4 ]$ l+ x; a4 q
程序发布需要.exe、bin\、.fig3 Z7 D$ c8 e' v' y. O
' r- h% v' e8 U; f) L7 q# |& _
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件' [) Z' l: n0 b0 V& l
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径) s0 {3 |. \* t" g( M/ R6 B; K
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同/ x+ o& Z0 ]' }, f2 z
+ D# d8 _: ~/ A X) o1 x3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
. t! @# |- m3 k1 g以下通过注册表自动添加path路径
. J. A" K8 D! C4 O%————————————————————————————–
; h( Q' Q1 n+ a8 {8 a6 X& z) ]" _Screen.Next(); — 进入下一个屏幕3 ~ q4 D' g& Z) W( _: Z: a; f
resultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
. s/ {& S0 `/ zif (resultDialog == IDYES) then –加入安装路径
* O# s; k1 G$ \, Y6 qstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);
) p9 T$ l$ [7 f, n8 p if strPath ~= “” then# M$ n6 [+ I. j7 P
strPath = String.Concat(strPath, “;”);8 u; q7 m' w w3 i7 ]
end
7 r9 m) @, z9 e& n1 P+ A% K strPathToAdd = SessionVar.Expand(“%AppFolder%”);$ w& G( F+ i5 p; V
strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);; ~5 h9 ~ W% {' g, Z
— 如果路径中无该位置,则加入/ n. v+ T% ^1 s: s, a: Z( O
if String.Find(strPath,strPathToAdd) == -1 then
" A% x9 ?0 B) t1 O" {' f strPath = String.Concat(strPath, strPathToAdd);
% M7 t: V. a9 @( p Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);4 ~+ |5 q; |, [% n/ B V* Z: i
end% k" P) M* A3 N( b4 w. x" C
end
: v4 P2 [: y4 a; S%————————————————————————————–
* R q3 P3 d) q H- n0 C方法三:
2 Y ?7 a* s: N! y在网上搜了一个方法,还没有用过, 贴在这里仅供参考:0 k! ]$ R! _4 J- I, M- M8 [2 g
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗--- F* m8 v3 l e4 y$ R
首先,使用mcc编译得到.exe文件,具体参数见帮助文件;2 M% [3 T# p1 N0 B1 v
其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
% }( X6 {+ ^- B# v) j3 Q第三,在MATLAB环境,执行命令% k9 m5 Y5 ~- I7 d- Z- {6 p3 U, r
mcc -m -B sgl file.m$ M _% M2 p( C ~5 \
或者 mcc -p -B sglcpp file.m4 h! f- S( n4 a3 S/ i. o1 `) v
请键入help mcc看帮助。: E1 k: ]: i4 K" m) R1 P$ \
mcc是在“command windows” 用的吗?0 c, Q& f/ j" I2 [+ E& M
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.& \& v- X- A7 b- |
还有“添加环境变量path”是path到.exe文件的环境中是吧?
! o( u9 [4 f# ?, }; h8 ~3 @3 Y# k" S8 q! f" @: u# G- n( R, E; l# u
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装
$ P9 n' B. U. Z% Y( N5 H三、 如何将gui生成exe ?
7 l' Q6 w2 d. C. N已有gui.m文件和gui.fig文件* {! v' ]3 j2 i
1 在matlab的command窗口中输入
" c& K& z7 x' L# m$ Z: Hmcc -B sgl GUI.m
; [) T" t {/ v0 s, A2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
+ T9 ^* u1 h G$ X) E此时仍需matlab所必需的动态连接库。
# D5 a" m" |3 T& S3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上
8 ^" D+ z+ ?- C! ^% ^; E5 ?4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
- @, D9 M' x+ t1 O5.大功告成。 # \2 F4 I8 L# Z! C3 S' v2 t
7 A+ W/ {- _0 _- y7 r& p$ I外一篇:MATLAB M文件变exe文件6 F- p$ g+ x; c, p3 ~9 L9 F' T- x
我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序9 }2 L" k9 o6 m1 l9 Z
希望这些对你有用
) k, {( n* E+ Y9 ?, f4 L' X
9 s( ]& c5 E6 `5 ?8 V2 ^0 o如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:3 ~" r, P8 q* {3 ~) d0 r5 ?9 M
$ j9 V# G6 q" f' ^
一、生成独立可执行的程序(exe文件)步骤! v, g3 ]: a( Y9 j6 Z: w6 b
Z! c" |- L b, i* l7 B
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
O! @ G$ R! P2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。9 C) S6 i! V; v* U
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
3 h. U$ z$ ^* I8 u+ N2 @, C& K当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
1 T( S5 A! y9 j注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;' Z/ R0 E+ C$ `4 Y& z5 F3 a; v
4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
" C; G6 T7 }! H8 {' c" H0 W$ A- s9 o: f& n7 x% e( V- ~7 h
二、脱离matlab运行可执行程序
1 i, l1 t/ X+ B6 lMCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:# t# V: J6 t* Z* s1 s- S+ _
\toolbox\compiler\deploy\win32
# ^# l' \+ V8 T! |) s文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。% \' b( ~4 n0 ^: J: L1 L, F
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。
6 A0 C G$ r4 o) O& q( j在其它没有安装matlab的机器上运行exe文件前:% Z6 } M* O: ?/ F2 T9 `
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。2 h, n: _, s- {, U; z* B
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。
+ c5 `* ^( b" h+ j/ G如果没有,也可手动安装,添加的方法是:* ?9 h# A2 I; G3 T) k
右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。0 t4 k9 p, E& e& q1 w
注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
: F+ C) z0 Z$ e, o) I( S. K最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。# n% N: A$ i5 p& f: _
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。; z, f% d8 Y+ T) ]
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
+ w9 n6 q, @+ [# U
; e' E! v- ~2 i2 P- \- g消除运行MATLAB生成的exe程序的dos黑屏的办法; u( T+ [0 F& @4 M0 z7 t
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:1 |8 E) u( {/ Y
方法一: 在命令窗口输入:
* Q+ F& M& e' J6 {! q$ S! _) n zcd(prefdir)% }' R, _; Y0 b1 |$ h
edit compopts.bat; i0 F, G! p# w- P
在打开的文件最后添加以下语句:% ^+ O8 y, F8 }' @# {
" k) Y" T/ ]5 \. CA.VC环境下:5 ]* @$ y, l; ?& u
' ]0 x) ]5 w! W8 ]
set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup ( d& A" ]$ y5 ~2 e3 Z. S
! c) ]8 X+ m7 N8 O- t5 n/ U
B.LCC环境下:
' c ]- k! G' S; q& V/ V+ yset LINKFLAGS=%LINKFLAGS% -subsystemwindows
. c7 N$ j' c6 F* V$ B. D
, L9 Q5 Z/ b2 {* X" q" {C. Borland:
/ K: @( g7 w( F# D9 E set LINKFLAGS=%LINKFLAGS% -aa
y7 m3 u) x2 c; ^; \6 E3 \
1 @7 ^; v2 ~+ x; j# f& w4 J保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了' {8 z: P0 M2 Q% a& D
, Y% L5 ?& n* p; k6 H方法二:使用suppress工具:# h+ H" l7 Q2 e3 f2 a. @
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
* }' |9 {% } D+ p. o
+ }, q) M- r, y+ x1 O其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。0 @$ [/ w' S- T3 S
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
3 |. ^6 }4 [1 B/ u! Q
作者: 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 |