数学建模社区-数学中国
标题: matlab生成exe文件(总结) [打印本页]
作者: 我能 时间: 2012-11-2 13:08
标题: matlab生成exe文件(总结)
matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:# s! u. o3 @4 l; j/ E2 i3 o
K! _) X [" {( Y# D2 y1.Matlab环境设置
要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
- }) J' m- S- l0 h+ x' |* Z: ^9 jMatlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
+ s1 I( s8 R, l虽然生成的可执行程序可以脱离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% v0 M2 x! u6 c& w' D/ v2 t
libmat.lib! n, S5 H, b7 O' O3 c6 c: a- a
libmex.lib
9 P0 w* l& s. n% } D$ X5 }$ @( Klibmx.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"。
% @" ]1 K$ {0 C: W
2 {, ~; x: z4 l2 J6 R+ l. y I
1.设置编译器:
! R- |% K! t3 U在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:" \" ` c5 B* U
Mbuild –setup, 按提示选择matlab自带编译器LCC。( M0 X6 V( T; d0 N+ P8 X
& b7 |$ h" A: M" V4 C6 P( U2.将脚本编译为可执行文件:
2 \) ]4 t9 n# ]" U$ S! Q如项目文件包含:gui.m, gui.gif, fun1.m。
, r) ~; v4 K# X# S \: y( D6 T5 P7 T3 u7 u
在此路径下命令行输入: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环境运行必需的文件。, R/ L% T, A+ u: `* l
: p# G, R! o5 n3.在未安装matlab的机器上运行可执行程序。/ m1 w7 o) g4 X- s# `! X: k% A0 S
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。
7 Y+ D- r. U# K6 O将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
7 `2 T, \& ]7 b9 |* ~6 w, k1 _2 _6 D% R
4.去除独立可执行程序运行时的“DOS黑窗口”。2 y, A, f9 m/ f/ n+ f# B
以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。! D( z& T5 H+ U* u7 g
! V1 @3 U0 W/ \$ L4 j+ xmatlba命令行输入:
7 p' H8 l: D1 p6 Q* d/ m2 f' I
$ [0 r$ K: s9 C$ r6 ]3 Ncd(prefdir) m; h0 M! A) O8 [$ A; N
edit compopts.bat/ d; t8 S3 g3 \
$ ~1 S1 I" @. C2 d此时compopts.bat打开,在文件最后添加:
- R* R5 d+ h* {( n/ v3 W+ X4 ~: g3 A/ \. g1 j% H5 w
set LINKFLAGS=%LINKFLAGS% -subsystem windows
' D, n+ c! d5 Q) t. W9 u/ ^1 t6 v O% M4 Z4 o g& ^
如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。
% r" g5 E! q0 W( I" C" A- Z3 \8 S, \3 o$ z) n
另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
4 S6 ^, h5 Y5 Y; y! n% x5 h. \
& J U6 }. F, E; yMicrosoft Visual C/C++:9 w, Y$ v+ @. R5 c
) N2 v8 L* N# F' u9 G. Fset LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup4 g' v+ O& ^8 V# R. `# a) z X
' o% I7 i( x, C( M# d# E) z. i
Borland:
- y# l, w1 Y: a& R0 W0 U& z! M2 r4 y6 S
set LINKFLAGS=%LINKFLAGS% -aa$ x4 u4 ?$ H6 }! s* X4 O
———————————————————————————————————————–
: p/ G# J" {* }. n! J" W- Z( N5 d
( t1 ^9 n& S9 d' }1 d; d# D7 A- V方法一:
6 A5 f- z g8 _) Q; g, v已有gui.m文件和gui.fig文件
4 M3 J- q; q* R6 | k- K) E1 在matlab的command窗口中输入
" ~" O p" S' @) Q% ~mcc -B sgl GUI.m# I' L; y, A* F: o
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
& }6 {: M1 Q; O9 y) G1 n
( i, v& _( z( d此时仍需matlab所必需的动态连接库。
7 a" A3 t7 ^1 G; l/ U3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
, I6 {3 D* N0 t8 k" u( h" L4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,
$ c- }* |* i3 R. C: P其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共
( e: z2 ?7 M5 K( w$ O( y9 O' e# W( K2 x有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。& A7 P4 n8 o: e3 H. m$ g- _8 W4 U
而toolbox目录则必须与应用程序同一目录。 G% t) ^" b W$ |, U
$ g/ N0 } Y' U/ o% z' K- |方法二:2 u; b" g+ O8 D
$ w% o& m# K! O2 U. G3 D- O% e
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
! [( u+ q+ e; C% j
% v! t4 v8 ]( c4 X1. 转化为c/c++程序并编译为.exe$ L: l2 Q4 C* W- q2 ~* A
先验证mcc是否可用,用matlab中的example验证即可
; d, U" R4 v, x8 j6 v/ J建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)% Y. @# e; A" [* x8 q! F3 |
由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure$ Z$ S1 C5 N m3 C
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等
3 y' t) x$ u; i1 l0 J程序发布需要.exe、bin\、.fig
8 I& p& F& H B) j! Y' v: J! ]* H% o6 y" O" |( H
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件
2 i( t L* D0 q. L& a7 o( z, t) C* Z( \0 W前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
6 @1 M* K' Z- ]另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
; K0 S# w* r" d- h( y- ?
: g' G- E2 x# I9 x* \3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
( w; @ T$ W' k+ r4 m2 }/ i% q4 n以下通过注册表自动添加path路径6 t) d( Y5 B1 V( i% ?1 F
%————————————————————————————–/ d F- @' D* r
Screen.Next(); — 进入下一个屏幕) K; j4 \0 i: w# y- R& F4 ~* w, l8 H, S
resultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
2 o' V' f3 G- m# aif (resultDialog == IDYES) then –加入安装路径1 U; y# H t$ g; P$ {/ ^, c: P$ y
strPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);, u2 f: Q9 ]% w6 w( [
if strPath ~= “” then: [7 z- \) f( }! m5 T9 _* t* M
strPath = String.Concat(strPath, “;”);4 }* B4 j9 n2 ?4 f0 J+ ~& h. C7 `
end
6 _* f9 o) J5 _, W strPathToAdd = SessionVar.Expand(“%AppFolder%”);
( T, r1 }5 a+ h; `strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);7 n/ @8 e& g o# X( b' ?5 c
— 如果路径中无该位置,则加入
1 j2 M2 t2 t) g- u! ~; nif String.Find(strPath,strPathToAdd) == -1 then
2 \. R! V9 {: ], H' H3 S: ]& P strPath = String.Concat(strPath, strPathToAdd);- C; L5 R, A! R6 S( r( O* U2 u% `
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
; s. S7 F6 c% K% U end$ N v+ _% k+ F6 q8 A- ~# F0 P) w
end; y P: e9 S+ [& V+ }5 ?% V4 J
%————————————————————————————–
9 s a- c' U; a: x' M$ N方法三:
9 P7 g/ d- N1 t' L% ~, p R- ^/ N在网上搜了一个方法,还没有用过, 贴在这里仅供参考:! u( T, R* m/ a
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
# u6 u9 v6 q, \首先,使用mcc编译得到.exe文件,具体参数见帮助文件;4 E0 p; v: f8 W( |% G
其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件; r2 r# X4 a2 \2 J m. L
第三,在MATLAB环境,执行命令$ m5 E! |/ x/ }( E, E5 I; y, @
mcc -m -B sgl file.m/ ?3 F# p. \2 |: K6 _9 U2 W! V/ Q
或者 mcc -p -B sglcpp file.m
0 C+ w3 R& R! j3 _$ v! g% E' A0 U请键入help mcc看帮助。) Q6 o. C$ W3 ~1 N
mcc是在“command windows” 用的吗?% G# k" N8 b1 V. e
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.
' l8 m% G5 Q# u" o' u4 ?还有“添加环境变量path”是path到.exe文件的环境中是吧?5 k4 i% R- O. j; L, M
8 k, s0 ^$ y; C: o二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装6 j& ]: x& E* p2 ~0 K; a
三、 如何将gui生成exe ?
0 V, @% V1 e/ p& Y已有gui.m文件和gui.fig文件
# a* L' u; w! @7 J* V0 L) g# O4 s1 在matlab的command窗口中输入( @% h4 p. D! R1 \7 C' ]
mcc -B sgl GUI.m
5 G( W \- }/ N* P2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
' E: o# k& N& f4 {( I* w8 U/ L此时仍需matlab所必需的动态连接库。
* ]0 |+ T, M9 f( Q7 u) w3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上7 `2 v$ w" ?* p- y2 K3 P
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。7 w" z- x: o4 i) q0 w( s
5.大功告成。 9 J; B4 O0 P: v
& u, Q. B2 p) g9 ]+ F. F外一篇:MATLAB M文件变exe文件
% V3 j$ ]2 ~% b0 V0 O7 }5 ]% D我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序8 T- B# a1 R; y+ D. K# A$ _/ k
希望这些对你有用" M' E" x, M8 L% C& ]8 y
7 E+ s* }% V1 E
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
* @2 x2 c% U9 F* h- _% S, p& Y8 L; j- b5 g, o( Q$ y( h# j
一、生成独立可执行的程序(exe文件)步骤
$ G; D7 ^& y3 R* {( m' h/ H6 j" T0 d7 E7 i4 @- p, u
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
" [+ A, J7 u e2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。$ m( B" Q- l: P* c% h* Z
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
, a, g# N4 r$ k" g当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
' v% M+ {- Z/ C; Z) _注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
9 @1 r6 ?$ Y( [& o" |! R4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
. N5 [$ X0 b! V p$ Z( A/ @' M7 h! ^4 U/ M2 u! G1 {. F
二、脱离matlab运行可执行程序
0 K; v! W( t$ d/ c( N( w, mMCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
8 s2 Y# V7 v- k6 l- O5 b \toolbox\compiler\deploy\win32
+ I" U. s8 @2 r! o文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
; {6 j; I; f6 T: ]2 l3 b, ~+ L在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。' B' f( R T, o a3 {8 ]
在其它没有安装matlab的机器上运行exe文件前:
# T, Z3 p4 G D' W( L首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
3 |# z% P# q( U( \4 k8 p其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。- t# d, w% E) [ I0 Q& L m8 ~
如果没有,也可手动安装,添加的方法是:
5 Y G$ N" P7 K1 t右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
# r: v" M7 i# d注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
2 v# q7 M; B8 h c& o6 O, K最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
7 b" ` r1 `( Q1 v问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。
& o' }- w% B! \1 @% J) H( M美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:) y+ U5 E& p% e' l# p- b" ]5 S( e& y
, m* `( ~# {. C1 t" L/ L1 m
消除运行MATLAB生成的exe程序的dos黑屏的办法" e( ^3 z3 Q4 u' w) p: y: I
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:* E5 k) J( T; B) @, i0 x( J
方法一: 在命令窗口输入:
- x3 M* O' c K- Ucd(prefdir), A) q5 z# ]. ^# L# u' c, n' r
edit compopts.bat: h, b& A) f) V$ U
在打开的文件最后添加以下语句:( | _ A7 y$ V% a
. h+ E% l$ @( s" U. B
A.VC环境下:
5 O2 x- y. G) p0 Y: L+ C# |) Q2 @
9 h0 i7 ?& @5 N! S3 n* _set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup & v4 U, Q* y2 \& c
; j) S: `$ k0 ^' M8 {* S2 z
B.LCC环境下:9 C i% ]- b# N; b- |
set LINKFLAGS=%LINKFLAGS% -subsystemwindows 1 R8 j6 K3 z- c8 b9 _: [6 r0 `
" P2 f6 ]5 k& nC. Borland:
# j. V8 n6 b5 f& V- @1 H set LINKFLAGS=%LINKFLAGS% -aa9 k8 J% \7 N" m- a. R% L) j6 X1 Y
( V% }- f4 {3 T* a2 Y7 F
保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
. ^& r2 y8 a# r( p% \9 U' T: J& V9 N7 O k' l: z* C
方法二:使用suppress工具: o1 p* y% p" s0 U+ `5 G, V* |# M
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。9 z9 h0 [6 v0 P, J- r Y2 T: @
. A6 r+ b( r J8 V8 H* ?9 R
其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。6 G( d( c: ~ G1 S3 a
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。2 A( _* G& ^& r+ W$ i/ s0 M9 f
作者: 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 |