数学建模社区-数学中国
标题: matlab生成exe文件(总结) [打印本页]
作者: 我能 时间: 2012-11-2 13:08
标题: matlab生成exe文件(总结)
matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:
1 D& ^2 P2 }% \: F8 @
( z) q! v0 k5 K( M0 V: q1.Matlab环境设置
要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
" L# ]( b3 S- A j) ] C" yMatlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。1 @( t+ Y/ i' E4 v5 E
虽然生成的可执行程序可以脱离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" _, |8 Q W# h+ ^7 e6 @1 blibmat.lib
7 Q7 P b) [' Clibmex.lib' z$ s/ f: |3 e9 J. }
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"。
6 f. w" P3 q+ ]. V# K3 ^/ Z 4 Q4 a: ?& _/ _( W, f( h! ]1 D# v
1.设置编译器:4 |" K# ^% K( z0 o
在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
4 {& c) A& b. |) BMbuild –setup, 按提示选择matlab自带编译器LCC。
$ B' j$ S7 u, U3 H; c" Y( e6 I M( I8 }: k8 L; M
2.将脚本编译为可执行文件:
- @3 F$ f1 a; S如项目文件包含:gui.m, gui.gif, fun1.m。
- x/ j' O# P" s7 i+ t* ^6 n; m* i% K9 `, W) r( X
在此路径下命令行输入: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环境运行必需的文件。
8 m l5 I1 A" V! }( H) m
* q- F+ J% v1 s. T5 c3.在未安装matlab的机器上运行可执行程序。
- W9 ]- a. m' v' @: j+ q2 F) e6 z将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。; ^! V" x6 U: a% J5 G( h
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。) C1 T B! c v4 O+ f1 G# r O
; u! y4 F. {) r2 g, c s0 [$ n4.去除独立可执行程序运行时的“DOS黑窗口”。
4 y" L1 x& N5 |% ]" b以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
' x& g4 M6 g" f" u. B# ~
# V% m* P2 B1 V$ k3 nmatlba命令行输入:( L3 j8 W4 i' z) Q8 t( B
* H4 ]5 B8 D! h2 d. H5 x' o1 Ecd(prefdir)
- ?! }! n5 B5 d& A2 Uedit compopts.bat1 [% T8 y. K9 Z( D3 C, I
& q* V g4 q+ v/ i" c% H' P: H* e此时compopts.bat打开,在文件最后添加:3 Q* t& P& Q: s9 G
5 x. o H1 [1 I" u1 i
set LINKFLAGS=%LINKFLAGS% -subsystem windows" \" G) u0 p9 ^6 T2 [
r3 z5 Q+ b' l- O' m, F* f如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。
/ k- g/ f- d$ k" s
" M: L8 o8 W, y/ m& i1 e- K另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同! H/ [8 m5 E. [
+ D& C$ I' ]' n4 |4 ^( c
Microsoft Visual C/C++:0 v1 I2 c6 k+ H2 ]
& s/ }5 m, ~/ M. a- b3 F# O' @set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
/ h" E! I( H! }3 k( q8 J, e
5 L3 m# t% A; @3 xBorland:
4 n% V3 E: }% w5 d+ f. u, T' E' Q6 r/ Y6 j
set LINKFLAGS=%LINKFLAGS% -aa. \' c7 S. `8 F" t, c' O' s) W
———————————————————————————————————————–. X% a5 {3 N9 F( v! M2 D4 C& y
7 c/ w& _" A. Y2 z! H$ l+ x3 y2 m方法一:* j; K4 C9 h e' u- D# |0 B) z
已有gui.m文件和gui.fig文件
4 h P) X' f( J& I$ R& D, j7 M7 {" Q1 在matlab的command窗口中输入" E. w( e5 D; M1 j- p2 E( U
mcc -B sgl GUI.m% V' n) n$ Z/ w1 `' ^) \* O
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器* L) ]2 w: T0 G. N/ u+ b
0 s! Q( n# d4 s. m7 P$ H此时仍需matlab所必需的动态连接库。% b7 T0 U' n4 M3 y# i* }2 g. Q
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上& W( D3 i9 O. s4 c+ t
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,
2 t2 j' a2 t7 h其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共
8 n0 C% c, ]0 e; L# M5 e. _" W% `有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
+ L% Z! o% y/ s而toolbox目录则必须与应用程序同一目录。8 p/ N$ _: c. ^3 @: o# r
9 w( @/ a' u" X7 C( ?9 E j# e
方法二:) i# y1 \5 E+ Y2 f1 B" m
& Z: J- |) v, }$ X6 a Y
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
+ Y6 \$ ]7 q7 D& t g( G* F% `
) n9 r+ O1 p3 n6 a1 Z1 E1 `1. 转化为c/c++程序并编译为.exe9 h: [( Q3 O3 X
先验证mcc是否可用,用matlab中的example验证即可
- t. {2 V3 j" q) [7 t. Z2 `. {建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)3 I: A, f( V! [$ I4 m
由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
- ]" P( B6 b6 F- r: b编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等- V) h; p3 q7 `9 v2 {) N
程序发布需要.exe、bin\、.fig+ L+ L! ^$ Z* M7 q' _) F9 s( b
1 z& \5 h( w$ M- Q' Q. a
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件) [& q; e% J" Y2 C
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径5 _( V$ ?* z, n8 s
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
* Y D3 j" {- c' f0 N- q4 b& P1 _& q) G* {# P y
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布. p$ {& l. t! t+ X3 U0 P
以下通过注册表自动添加path路径
5 p C F0 f5 p" }4 y# Q7 F& `/ F%————————————————————————————–
9 X8 |4 P* s9 y9 ?Screen.Next(); — 进入下一个屏幕
B( q" i/ r& d5 F$ tresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
8 ?4 I* ?: x ^0 k8 sif (resultDialog == IDYES) then –加入安装路径, t' ]4 ~, I9 j7 d5 K
strPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);5 _' R9 N+ I: z/ `
if strPath ~= “” then! x) a& _ Q; G4 `$ w
strPath = String.Concat(strPath, “;”);0 q( g% F% u: x: d
end3 s! Z/ }1 s# D* A6 d6 T6 R
strPathToAdd = SessionVar.Expand(“%AppFolder%”);/ W) H, E2 J' [* I
strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);
8 N* y/ q, j" ^" q— 如果路径中无该位置,则加入
% G- J, B! H- x& i* [# o% nif String.Find(strPath,strPathToAdd) == -1 then- ?& b }# ^. O2 m$ D
strPath = String.Concat(strPath, strPathToAdd);
, a6 Y; t+ ] } Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
, }3 h- k& m2 t0 N" U5 K3 m1 I8 Q9 Q2 o end
( U b; w3 p" [4 mend
+ ~5 g `. I' I9 _%————————————————————————————–
' {7 D2 T4 U3 A$ h方法三:7 t6 ?* Y: T9 D) G: R
在网上搜了一个方法,还没有用过, 贴在这里仅供参考:
7 F" b( o1 Y& {' J* X$ p一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
" V- F- q! M# Q/ `/ q8 Z5 a% S- g首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
% ?; I; l" H$ y, h+ @: ? S) g其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件# r* U" o+ K% V* j/ E# l* E
第三,在MATLAB环境,执行命令
* v- k5 m% I+ [1 xmcc -m -B sgl file.m
/ h% l7 ?/ k) z2 b; @6 Z或者 mcc -p -B sglcpp file.m
% P* w# b7 p- j4 E! T7 R请键入help mcc看帮助。# U* u9 F1 c1 y- m
mcc是在“command windows” 用的吗?, k* a7 u5 L% e* ]
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.
3 ~+ M b3 `( {* ?还有“添加环境变量path”是path到.exe文件的环境中是吧?
) M2 `3 Y- Z, B; D1 O9 }: R# e# k4 ]0 G3 B
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装% `4 w5 p" a2 r# H% T/ i" {
三、 如何将gui生成exe ?
i; |' x7 C7 O3 b已有gui.m文件和gui.fig文件
. U$ c0 O) {! a7 t+ B: w# {2 o' _$ U3 k1 在matlab的command窗口中输入1 P2 X1 ?9 h0 i* F- \' }2 h
mcc -B sgl GUI.m: P7 ]; D7 \+ M1 ]3 [9 U
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器, A5 d+ v5 a! h$ @7 W
此时仍需matlab所必需的动态连接库。
7 d4 Q( U/ z5 h8 X1 C' R" T$ Y$ K3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上
# t; s* y( t9 ?, N6 P4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。/ S1 {$ ]4 r! O F
5.大功告成。
, U/ `/ G: b3 K+ O9 C5 f7 [5 b" Z2 l$ }8 p/ f! T
外一篇:MATLAB M文件变exe文件
# K0 O% y/ s V我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序9 i4 w5 L- O( z% _5 ^
希望这些对你有用
( I4 @# U5 p# H# n
+ ^ q g( h( P& e+ A3 a l如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
2 J( R/ \# {# y# `% c9 z3 L
2 O# a# @9 f8 {) b8 q& p# q- S# _一、生成独立可执行的程序(exe文件)步骤
9 B' l3 H7 N7 u4 [% i" Q4 I, F+ Z* [3 n
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。 Z9 Q C3 b0 U6 p4 ]- l0 N
2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
2 d X. l/ B9 O9 p! l1 k3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
r7 Z6 u8 B& d9 c当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;" c* `' [: S7 U% f5 G; @
注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
% l, Y" {2 P2 g/ b6 G4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。2 Y. t1 R! c! ]. x+ i2 E3 s6 i' N$ q8 d
8 Z5 Z/ H( {4 A8 C7 k8 k; m二、脱离matlab运行可执行程序! v _" L: u, S# {# f
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:+ r- A& R4 q+ k0 i
\toolbox\compiler\deploy\win328 P3 `* s/ B3 P4 C! V
文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
3 M" l$ K1 w0 g. n2 u在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。1 D$ k; _; p Y* h$ @+ t
在其它没有安装matlab的机器上运行exe文件前:
5 P" T1 I3 x4 K2 j# Z首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
/ g/ `& j8 z- e其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。! Y! J, `8 ^9 e# Y ^3 z
如果没有,也可手动安装,添加的方法是:
& ^0 H: T6 X2 d; N" k右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
+ S: k5 a0 W, y2 S( K$ ~4 D) t注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
+ P- k, s( p5 t# D0 J) F最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
. H, F8 u% N: L问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。 ^" t8 Q* V. l( C* f2 S
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
( }9 f, U: o: T3 j( A7 v
& k$ x E \$ A7 n; X消除运行MATLAB生成的exe程序的dos黑屏的办法5 I7 X; H W9 D
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:, Q8 U) S: z, D& q2 ?; m
方法一: 在命令窗口输入:
0 p$ R6 X8 l' pcd(prefdir): Q& E N b6 d5 ~& j* `# S+ |9 r+ L
edit compopts.bat/ W" E4 I i3 X8 z1 H& e, N3 J$ g' j1 x
在打开的文件最后添加以下语句:
$ d- } M7 z0 {6 E* Z( V. t! i) Z* h7 L0 _& l8 h
A.VC环境下:
" h* N! g+ Q, y3 q; a1 X- @. o, C8 `! ~0 x( }0 r
set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
7 i# b9 c1 {7 v
$ P: `" K# x0 I9 S3 p# j( {) vB.LCC环境下:% h7 K8 i' Q! l. {4 o
set LINKFLAGS=%LINKFLAGS% -subsystemwindows
# i- k: }3 C/ J, ^- Y% y+ X2 R" K$ ~8 x' `& c h$ G9 }
C. Borland:
) z9 l0 \; J) T _. Q6 b% y set LINKFLAGS=%LINKFLAGS% -aa
2 j6 S- D1 p3 \0 G8 [$ M% l& g" R" r; y: y9 I
保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
( \2 W, _: ^' a! }1 |( o! b
# `; T* Q7 x w) G方法二:使用suppress工具:
! Q: k6 D6 C3 Q9 `& T' {; V下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
}4 J: D! d/ Q6 R& C. t- G5 j& N5 |4 C- F0 K% O, Q
其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。: d3 j1 M" \, t8 ^
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。% _0 G& G' L2 `- E7 A; J2 T0 N
作者: 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 |