数学建模社区-数学中国
标题: matlab生成exe文件(总结) [打印本页]
作者: 我能 时间: 2012-11-2 13:08
标题: matlab生成exe文件(总结)
matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:# o6 f; `& s5 G0 Z9 |
( m1 \% R7 B0 N. q" z. T8 A
1.Matlab环境设置
要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
$ F, u% Z/ ]) s2 {Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。1 e( I, V* q/ x5 U2 B. F' S
虽然生成的可执行程序可以脱离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 x( B! `3 F2 q+ _6 C
libmat.lib
6 W: U; T* v1 r/ S9 e! z1 }libmex.lib
* z/ i. [7 R! Clibmx.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"。
$ |. k6 t! r; k 3 X4 k3 T9 g9 y' T
1.设置编译器:) J6 H; T3 T. x% J s& P; N
在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
" N6 |; e* l+ R; b2 rMbuild –setup, 按提示选择matlab自带编译器LCC。
/ F' {* H6 {! i0 v% `( d. a q) n
& b1 \# Q9 P; z. i* Q2.将脚本编译为可执行文件:7 t+ V! l& U( c5 q, c! b
如项目文件包含:gui.m, gui.gif, fun1.m。
! B7 h* D' ^' e' d4 P
" `- z# i5 M; R在此路径下命令行输入: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环境运行必需的文件。
2 S0 J6 t$ J }6 p9 w& e7 x Y4 ~8 s/ l/ r: K9 ^0 i2 U0 p
3.在未安装matlab的机器上运行可执行程序。
" G, `' \5 v& O) {将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。
* t+ O8 V. I" M将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。9 W4 d7 ~: v9 [
( |' V" g0 {/ _, c$ C" D) j4.去除独立可执行程序运行时的“DOS黑窗口”。+ N& f# C# i$ [! V* }
以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
, N8 D4 |. o1 U% Q( I: l
# B3 P1 @, _- h w# J1 |matlba命令行输入:
, t+ a& y- i5 A) w3 R J# w8 V4 j3 g# J5 w p
cd(prefdir)
0 E( }+ U z& e. Y2 e3 W/ t8 [5 Eedit compopts.bat, h) {2 d6 o v. R
/ Q- B; z) N! H7 O9 O此时compopts.bat打开,在文件最后添加:
$ T9 i9 @# V% U+ ~' a( E! e; A" U' A" ?2 l# y) W1 c
set LINKFLAGS=%LINKFLAGS% -subsystem windows
m, k) @6 U/ o0 i, Y0 D8 h8 C
- u ?6 J. ]' _如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。9 M. {4 x; N' z1 D
9 S( f3 Q3 u3 L8 \& [8 ^% H4 L5 u另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同 |4 y/ N1 m2 Q) @/ k
! ` H: m; ]1 S9 h
Microsoft Visual C/C++:8 S6 I" e) m. V; ]
X3 c$ [3 l+ M, V/ ?( tset LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup$ A' k4 F8 @3 w% h: s+ S. w. F
' d* t! ]) k- i- t; T/ H! PBorland:/ ~7 b: E' j" a4 v( o+ l
! f! l+ Y' ?$ w6 b5 Oset LINKFLAGS=%LINKFLAGS% -aa
8 ] A' y0 }- B———————————————————————————————————————–8 ~2 |7 E n' u; `$ N Q+ h. |
# |/ ~5 B: o# y0 k& X- @% [; v方法一:
& K9 M0 X! `6 k1 v4 g已有gui.m文件和gui.fig文件
0 k+ h. b4 Q) _* w F0 d2 Z# i1 在matlab的command窗口中输入
7 `2 c: P) ^% B! |; Y2 K( imcc -B sgl GUI.m4 @. e3 q' ]) X, L4 D
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器 @; d3 w$ s6 k
4 A m- T5 c, [ \
此时仍需matlab所必需的动态连接库。
9 D- o) p% O! v1 e3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
" H% H9 L* ]+ {1 P4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,
3 a' o0 k6 s% o0 h2 }& t其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共' D+ M, h$ J$ D" ~- w5 t4 I' a9 v
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
+ h5 z$ t2 x7 Z0 {& I而toolbox目录则必须与应用程序同一目录。
- q/ W; Z: K& v" ~6 h
% Q9 e; g1 E& K Z方法二:4 x. n$ }2 v+ s" x' z) k3 G
( u/ r& `/ O; U, t# M6 Y; Smatlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
: m& Z1 k6 T: \ h/ t9 p( H+ H* H6 X' j
1. 转化为c/c++程序并编译为.exe3 f9 y5 ^/ u( X* k- `2 b+ c
先验证mcc是否可用,用matlab中的example验证即可
) R% F) H7 {( k% ^0 w+ j- _建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
/ }8 a3 P/ R" G. v$ z/ F/ ~由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
3 |' o4 M: Y3 R. J3 ]$ y编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等
- Y5 N; ] f# {% R程序发布需要.exe、bin\、.fig: C+ j% X6 Y. b( c' I
+ M' P" s9 }% x8 _
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件
+ X3 C$ {1 g; }前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径# O c, Y. u& d6 p2 d& g' m
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
; N4 ?$ m& e' L) S7 @4 M& @& J
% J' u2 ]* @; \, e1 Y: N, h$ `) o8 A3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布8 c( r9 d$ N+ ~- S
以下通过注册表自动添加path路径! @+ q% d! m f: i& B/ ]; F
%————————————————————————————–
& D7 h" I# K6 G" rScreen.Next(); — 进入下一个屏幕
% q- K! g/ ~4 Q8 m% e4 q3 P! OresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
4 n( s6 r5 w; a bif (resultDialog == IDYES) then –加入安装路径/ F+ }. D; P6 T' u) K
strPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);
0 N; a9 |0 R; S+ C% ?% S* Z if strPath ~= “” then2 y/ [( z( ^9 m) X
strPath = String.Concat(strPath, “;”);$ N c$ X2 s4 z# |" _ o
end/ r, u& G. M/ r' q5 `9 [* T
strPathToAdd = SessionVar.Expand(“%AppFolder%”);
' g2 b4 e2 v. C; }strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″); `0 D; A n$ L- H
— 如果路径中无该位置,则加入
8 v. f* ?' ~0 u' [6 i: W' qif String.Find(strPath,strPathToAdd) == -1 then! j7 d7 t) e1 x$ J
strPath = String.Concat(strPath, strPathToAdd);
2 T6 g) r- t2 e$ _# @ Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);6 L' {5 @2 `! H2 o |4 X
end
- x9 e/ w4 u4 J$ M9 c send9 d4 B, O0 l, N
%————————————————————————————–4 o5 L$ `# e/ K% g
方法三:
. t, \" L( E% a9 k! F在网上搜了一个方法,还没有用过, 贴在这里仅供参考:" i! E0 L0 }: p( u! B# [
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---' |- r) a1 ^( d9 X7 z3 k- I
首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
, R# M) Q% g" h' B其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件# }- D; o9 s7 f- n: _9 S% ^
第三,在MATLAB环境,执行命令
/ @2 |" }( \7 J. h0 Q& T& dmcc -m -B sgl file.m
* m1 F- [+ {- Y或者 mcc -p -B sglcpp file.m
) z {( ]1 D8 U8 X) Z. d# e请键入help mcc看帮助。7 x- f7 B% Y/ }" ]: @: D" ^
mcc是在“command windows” 用的吗?3 Q& N! }7 T! P
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.
# C4 E( x( H" ]$ G' @还有“添加环境变量path”是path到.exe文件的环境中是吧?
) _( R/ i7 F$ c( @0 w, U r: c# ~$ D3 I5 |
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装 r+ m7 q( G2 I, T# F7 {% o9 F k
三、 如何将gui生成exe ? B8 u7 V" E8 O& D' T
已有gui.m文件和gui.fig文件, \7 w1 T0 N/ c( J1 W
1 在matlab的command窗口中输入
S( p4 @; M- F; n/ F( k* bmcc -B sgl GUI.m
( R& ~- g: ^4 P V2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器" Q7 N8 ^+ A4 i5 A
此时仍需matlab所必需的动态连接库。
( L8 S) [+ R z+ i, r* a3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上
- X0 O, n9 ^! n4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
, m' X: H7 i1 I+ c3 D8 ~" H0 v5.大功告成。 " X$ e' i1 M+ _8 q6 a2 W
k' h1 N, o2 @' V3 s% F
外一篇:MATLAB M文件变exe文件& {8 P' z0 w. T4 {* x, f. a
我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序
2 `1 v# m4 | P1 A# |3 ?希望这些对你有用' d* T+ m( f% |' [* V8 e2 [
& I$ A: Y! |. n9 T# K0 ~! H8 v3 T! n
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:6 r5 F/ a) X e! C; |; Q% k- R
5 v) g. r& P2 H6 m8 t: o
一、生成独立可执行的程序(exe文件)步骤
8 ^: W; e6 v$ N# e; x2 N. o9 M
9 H1 h, G1 s8 m* R! |: }7 |# W( o1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。& v) W* j6 |5 V: L- }0 k
2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
( b/ {% D8 t" Y; p6 b. A3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
$ j8 ~! b; D( G& t7 h: W- }当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
b, |( o, c5 h) l$ a e3 O% K注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
& i. X% J w' h4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
/ |4 \ U; A, i6 v
: W8 [2 E& Z6 ^8 J6 S9 r二、脱离matlab运行可执行程序! U0 W! d9 A$ N; t
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
2 U* J- z' J! {& `0 o6 \ \toolbox\compiler\deploy\win32% ~$ Y% W5 r. g3 X1 X
文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
M/ N$ `& O' Y J% E0 h7 `在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。- A5 Q9 P+ U/ D0 Q* Y6 I% O
在其它没有安装matlab的机器上运行exe文件前:
+ B$ G% g9 ]" M首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
7 A7 e6 l* J$ Q% f/ Z) T- v& J1 _- Q其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。6 q0 Q4 E) J- N+ e" y
如果没有,也可手动安装,添加的方法是:
+ W* ?: `$ m) c7 j右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
8 h8 w5 }/ X1 x3 {注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。! ?3 t( K4 c9 N5 Z% S% X
最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。 \1 I- a! S, T' h
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。4 X% Q5 W0 H+ I8 K
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
- k; g+ W$ R3 r3 y0 W; o) z4 r$ P& Y2 [, f8 U
消除运行MATLAB生成的exe程序的dos黑屏的办法( L+ r! s% J, ?, W6 e% d- D3 P
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:; K5 L1 v9 |/ y
方法一: 在命令窗口输入:
1 w- X& t) O9 Bcd(prefdir)
: B) e# j- E x+ w% J% fedit compopts.bat
6 P0 D U1 I, ]9 A3 l2 F% d在打开的文件最后添加以下语句:
' S7 t U7 {3 z+ T# R$ ]
5 s" Q* T D( c, {7 SA.VC环境下:
f% m& F3 C5 G h/ N$ G* B6 a2 B$ u" y6 q! Z
set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
& K# P/ O1 G# I) N2 A" F5 N( ~# J( l1 G% V9 _" Q) u+ F: a
B.LCC环境下:
7 w# R! N; V- kset LINKFLAGS=%LINKFLAGS% -subsystemwindows
, j6 \. \1 b6 `7 |. D
! ?* X& B5 i9 |$ H! p8 uC. Borland:
, m* k& A1 l" \/ T# u/ d' X5 ~ set LINKFLAGS=%LINKFLAGS% -aa
3 W- v3 N+ C' f7 W9 w9 a9 h* `* M r! t. v) A
保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了; T( W2 n; V6 c2 l* |3 t4 H: g5 h& n. y
9 J1 i% v0 G( }3 r% T. p0 }: w8 _方法二:使用suppress工具: T# a6 O- m% M6 B
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。- P( Z; u a. ?7 G
; N! Y6 d( i/ ^2 e/ b, B其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。9 E( p0 g: S/ I
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
+ k5 L( Y' l V& \+ T. t
作者: 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 |