matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:1 {8 Z/ T2 n' b3 q" I) g1 d
: J, z. i6 p3 I; i+ ^1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。! v3 J; k3 \' L- l0 J
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
, R- A* m8 e. r) r& s0 \3 n& {虽然生成的可执行程序可以脱离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
) R! }5 P: p& ?libmat.lib
. v8 e4 a2 x6 S3 `libmex.lib
$ _ F" X( \- f7 R, f( ^+ V' ?8 e4 rlibmx.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"。 4 P' f& X2 h2 @4 R% D
+ i/ ^: d7 b- y! {7 Q# z1.设置编译器:
4 Q O/ D g# `( c8 \; U在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
" j) H8 j; |5 H( X& CMbuild –setup, 按提示选择matlab自带编译器LCC。. W3 |/ U/ V1 e) b$ M: s
3 n* |& w; T+ l+ |2.将脚本编译为可执行文件:
6 j6 P3 r& [8 F; L0 T如项目文件包含:gui.m, gui.gif, fun1.m。
3 q# m1 L7 s. x8 _, R$ b% x, b' N! y& Z7 A H
在此路径下命令行输入: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 U0 \/ u2 ^+ ^. q0 l; h
$ x3 h# D8 ~/ G1 Q8 n2 |( G
3.在未安装matlab的机器上运行可执行程序。; ]$ r" [. u8 E0 d* k" p( L) j
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。5 L2 R. k! ^* z F9 Q
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。1 p, V- f- o* z0 l( p
& \' |3 M2 W$ n( U: I. f+ b; l9 D* P) |4.去除独立可执行程序运行时的“DOS黑窗口”。
. L/ p4 o% f1 A; D以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。4 }! d& v0 \5 c: S" a; e
9 }: L4 a3 G7 I* }9 Vmatlba命令行输入:0 N# `1 E1 g0 `, L0 |' P
$ {( |, I3 X! R4 y2 r8 U
cd(prefdir)8 x' o% {1 Z8 h1 ^. a
edit compopts.bat
( \% k: N! u6 l9 k( n# b
% b/ C) E& b }% W9 [5 M此时compopts.bat打开,在文件最后添加:
1 N. `. M& {7 F4 C! {% m! d" }2 X/ ?! H5 a
set LINKFLAGS=%LINKFLAGS% -subsystem windows
- J& w( @& s% V$ ]5 l1 Y8 n
9 I4 Z9 Y9 @8 w如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。
) l4 S( J8 F: [. L7 l% y* ~ t( f: W! d( H( N1 p
另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同5 C! J' X( @. p' `
* N. {( }) _1 k( TMicrosoft Visual C/C++:
: t, S* F3 g5 Q `( t3 p
& L7 Y7 @- f/ |& eset LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup& O0 P/ V6 {3 M! K
7 v* \1 }. R1 F8 ZBorland:$ [8 \1 h& Z$ _: k/ S
: e. _" |1 J: b4 S4 O) M" o
set LINKFLAGS=%LINKFLAGS% -aa
+ x. T: T) a5 v* }———————————————————————————————————————–$ \8 ^ `) q5 L1 e
: b* P1 Y% v$ a5 E v1 O9 N
方法一:9 R9 x7 Q; o! |
已有gui.m文件和gui.fig文件
, r% G! r6 F$ b1 ~5 ~1 在matlab的command窗口中输入
3 N# J3 y8 J/ a( x bmcc -B sgl GUI.m
5 |% V* B, l$ W8 D+ y1 n3 M2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
+ E8 \( y8 V; r1 X7 ]: C
' |) n( w+ v0 }7 L: l. U此时仍需matlab所必需的动态连接库。
; T3 P4 @, u% N# _+ o" O: W3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
6 ]" q7 R5 h! B6 z4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,1 @9 q7 e+ z# K" x6 ?/ f, h6 l
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共% t6 q( o- Q; t- R
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
M: K, h1 n8 L而toolbox目录则必须与应用程序同一目录。; p5 ~, i% n& Z
9 Q' j: [. t) H6 T2 V2 `+ M+ Y
方法二:- f8 n& P' R! L- J! [& s! f# M9 I
$ j5 ^ I% V+ t6 [9 y: w% Z" H; h; Ematlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
+ r: L% G: ]- r( K/ ]. y2 v+ f8 B0 t0 ]/ X" f" d; B
1. 转化为c/c++程序并编译为.exe1 a3 K% w, ^( P* D3 x
先验证mcc是否可用,用matlab中的example验证即可, @" n. n% S+ v
建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
+ T# v4 `3 L; F% @由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure* t6 D. D* }: Z& k" {# g/ u
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等
0 g" a- D; j0 N8 K程序发布需要.exe、bin\、.fig6 \, O8 E; T1 T# x5 C. Y. j
: e: U2 {! c/ p* B; i9 N
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件, [% L3 w0 d1 J0 O6 x, O
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
. o/ V+ f' W/ m3 Y6 n另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同) P) u1 e- h4 h
& i6 p2 r" B# w) ?; l2 K' x1 V. V3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
+ O8 H5 a+ v3 A" ^以下通过注册表自动添加path路径! N7 |) e) D! h' S0 b* L. J; J) N
%————————————————————————————–+ t6 C+ X5 s; n# D* d8 @$ ]
Screen.Next(); — 进入下一个屏幕2 e( n3 ~5 _6 P( u \
resultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);) M# z2 J+ u. o
if (resultDialog == IDYES) then –加入安装路径
/ T! w+ B: m4 j+ I( r9 l" @strPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);) V& \8 _1 n8 V& h
if strPath ~= “” then) f. p- T4 V( {/ p, U0 ?
strPath = String.Concat(strPath, “;”);/ A; m7 R7 R3 D/ f z* ^+ B& @ D
end
6 y, K! k) P- ^% I! g6 f9 k strPathToAdd = SessionVar.Expand(“%AppFolder%”);
. w4 D' T! I# p# HstrPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);$ v, X6 ?/ |# r: {0 T- i8 S
— 如果路径中无该位置,则加入4 e1 C- h1 K! o! D
if String.Find(strPath,strPathToAdd) == -1 then
) ~7 L- Q8 Z% o I. Z" F" r strPath = String.Concat(strPath, strPathToAdd);
2 t* h% o! |. ]% S' u; s' ? Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
3 [! a7 u o: v- [' e% r end7 t' w5 N) }5 a* d" Y7 @
end
v5 Q* d0 v- q5 n%————————————————————————————–
5 U8 g z6 }: N1 N7 y; F" { W4 u方法三:
4 a% g9 }5 y3 Q) b1 ?在网上搜了一个方法,还没有用过, 贴在这里仅供参考:3 g% _2 @0 {. Q% q2 W9 U* l
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---* G" |' O" E% \* ?4 ^& Z, f# v: Y
首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
( T N8 [+ h: B其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
$ b) P9 ~+ p( L第三,在MATLAB环境,执行命令
% B* y" Z3 _% B% c$ a' |" T- omcc -m -B sgl file.m# |# D) \+ B# J7 `% \6 x6 Y
或者 mcc -p -B sglcpp file.m% C6 r# U) G5 }# q! i) `4 _0 H
请键入help mcc看帮助。
+ v9 ^5 b/ r# v+ g; ]. ^- Nmcc是在“command windows” 用的吗? S2 D4 I/ o' z5 u0 P4 y) z- K. `4 ~
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.% M. E5 P1 S/ t7 U& S, b; i1 `
还有“添加环境变量path”是path到.exe文件的环境中是吧?
# `$ E B7 ^5 m: y ^, E% ]; T5 Z' n8 V
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装( |8 h" d% {- C6 e" R
三、 如何将gui生成exe ?4 o2 U9 a, j7 m2 `/ ?. e! p
已有gui.m文件和gui.fig文件
F! _! _; P% G1 在matlab的command窗口中输入" i1 _; m/ H8 e7 Y
mcc -B sgl GUI.m
/ T& {: I% n: @- Q4 m" g- { l6 y/ R2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器6 c3 j* S0 z! ~0 x9 w) Q9 G: {7 `
此时仍需matlab所必需的动态连接库。
* t% P! [' U9 l/ _% h3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上
! D. ~0 ?* v! x$ c7 i; Q0 e& a* h4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。4 t' R1 i8 k/ c `* `4 X( x! A
5.大功告成。
$ A% z- R5 w9 k" V& a, e0 t
- T6 z! G8 |# K7 V外一篇:MATLAB M文件变exe文件
/ A, T3 u6 L( I) U我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序
3 h, t, q5 h5 g# K$ U( p ]希望这些对你有用
. _1 Q- S5 Y5 ?/ ~! E" }+ V
; |2 `( G4 {. ?2 z% l4 C, b3 t5 V如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
& e1 A( L# B/ D6 f2 ~4 ]9 W0 x( V) u4 s0 y/ ]- V
一、生成独立可执行的程序(exe文件)步骤
* H" B3 }- e6 F
# H% _1 o9 f* Y* J1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
# L# `* h; S- o8 J0 m" k2 `: e; K2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
6 ]0 }- K+ h* }; h! b9 |/ d% s' R8 z3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。: u' x- V! _# Q# j" `; f
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
9 Z4 Y( U, X/ ^* R w: b注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;4 F! q1 p# V% F j' }" P, S9 }! p
4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
: X+ k! ^$ ~8 ^0 X9 h
9 `) w3 T4 e) l2 G/ w' \二、脱离matlab运行可执行程序2 Z: a3 J3 i& v y8 v: R
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
9 E0 \0 V' J# \ \toolbox\compiler\deploy\win32! \6 N* U2 x) u
文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
) s$ B, h" u. w: d6 j- v在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。
& K! p. {! D P9 H: G' v) W' L8 x在其它没有安装matlab的机器上运行exe文件前:+ B, ~& k- C0 K: X3 ~' a- p
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
0 p5 x. s+ B4 Z1 y6 V其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。
9 z8 P+ F0 h1 X, `# ~, n如果没有,也可手动安装,添加的方法是:
' g* l7 L8 x% p- G- Z# b8 `- `右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
' ^" y/ ?; b6 V% U注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。) ^) K ~, ^2 G1 f$ r
最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
1 E6 O& K7 t& Z: y$ j问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。+ \2 ^( M. k9 g9 N
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
7 q/ _! x- q) Y" F- ?* c: `6 e" ]$ X2 X& f! K# f/ b# r) q
消除运行MATLAB生成的exe程序的dos黑屏的办法7 @* }# e% m: h) r
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:
; U0 f! u$ A! z( Q h( m# W5 e3 e/ m方法一: 在命令窗口输入:/ l+ B. q a* z# I' W
cd(prefdir)6 O; I5 F! a2 [
edit compopts.bat1 p1 d P2 |' D/ l, k- B7 j0 U1 O+ W8 @
在打开的文件最后添加以下语句:9 s; Q" w4 S o- q% ]7 ?' `: v$ Z
' ^! d3 e' A7 m+ ]+ P0 t7 WA.VC环境下:
; e8 k/ ^% p( x! X" p" o; s' p, }
. h- [+ K$ z- i. ?set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup $ ^2 p2 x7 D w* e& f
' [* u* o5 Q- [% `2 UB.LCC环境下:5 l$ ?" j6 j/ o3 [! L
set LINKFLAGS=%LINKFLAGS% -subsystemwindows 7 t, R2 S" p9 z0 L& x
& C& I/ y7 {! N) o# FC. Borland:
3 J, u1 M, y/ ^8 } W set LINKFLAGS=%LINKFLAGS% -aa: ^8 X6 ]8 S" y# C' u
* J% D- W8 o k& r/ i {' r# E1 c保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了 Y7 }/ L ~$ w! \: c1 c
) a' w; O3 E3 z( d
方法二:使用suppress工具:' }" v' U( D9 j. l8 |8 i' p9 H
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
+ \6 f) v6 ]6 Z& N
: A: g& l6 J. K% H0 Z其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。& K$ H1 X2 P9 S
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
D5 S, O3 n" ~' {1 \1 d |