matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:
/ y, i: ^* W0 A2 G" i' U8 r4 ?# ?* ^+ D! G* h7 d2 y
1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。2 y! U$ G. @* _1 C" t! y
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
2 e9 V; ~# g* G8 c) s1 `虽然生成的可执行程序可以脱离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.lib9 E' K$ x o T% k* ?
libmat.lib
: \$ @6 h4 m) s# n' L" o; Rlibmex.lib
$ G$ p' P0 S- [% Alibmx.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"。 : ?$ R l' n4 T) e
2 R+ L: `, o2 ?6 F# Y, I1.设置编译器:
. U& T- T8 U' n4 g7 q% G. y( ?在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
6 z- H/ }% M+ `8 \5 I9 MMbuild –setup, 按提示选择matlab自带编译器LCC。! a+ Z2 ]! U) B- n, z
& p& S9 {- O" I2.将脚本编译为可执行文件:. Z: A/ x8 u. z5 }' [ Y, T
如项目文件包含:gui.m, gui.gif, fun1.m。
$ c* B' u, c z& K' r8 u% y, V3 l
$ ?3 A; \5 t8 G$ `* _在此路径下命令行输入: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环境运行必需的文件。& m% k6 K! s4 j! u% j+ @* B! L
- m k& v3 y9 O/ C* ?
3.在未安装matlab的机器上运行可执行程序。5 l' I) D6 D5 Q. @
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。
( b. n4 J6 G; g9 F4 M- k+ E将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
0 Q: }7 B+ J* |) [ Q8 |: j
& k) Y4 ]- j) H' }$ t8 I. ^4.去除独立可执行程序运行时的“DOS黑窗口”。/ n$ C& A) K2 y. ~# q& e. N
以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。 r- [' m) P6 z% D
: `1 i. `& X1 {% M4 C2 R
matlba命令行输入:! l1 V: I; ]2 L+ x9 Q# K8 d2 z
{* {6 f" r7 U, g' I& J2 y# ^4 r
cd(prefdir) Q$ r+ D {1 P& t
edit compopts.bat; [/ J/ {% [+ ?9 M X8 c# l
/ k# s# Z. o' O9 f6 v" e此时compopts.bat打开,在文件最后添加:
& }! S: R2 [. J+ u
. Y1 g8 J1 z; U5 @+ E) E3 w1 dset LINKFLAGS=%LINKFLAGS% -subsystem windows0 Q$ P/ a8 T+ e/ X' f
% G; n2 o: D8 G2 y如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。' M3 U% d) y5 I* \& B3 q' V* O& Q
/ z* w Q1 h' D8 C$ T+ O0 z& [
另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同, d' ~, ?& K( |. I& W% Y; D& n
# m7 f1 W/ V, OMicrosoft Visual C/C++:2 a+ f& y3 l+ q3 U3 F5 k% ]8 W
% l" _2 u& z/ g8 U. w+ @) F
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup; V c7 ~ [+ ~
" X. ?! {) t' XBorland:
: x* c- H1 B% {/ r2 u: j: D/ j$ u
; R9 T/ N; D4 q8 M/ wset LINKFLAGS=%LINKFLAGS% -aa* L2 d: _2 w! X2 K" s6 \" T" M
———————————————————————————————————————–" o$ H' m( i! L; _6 Q4 ]* }& d
* H8 d3 T6 f* U: n/ }
方法一:0 V( H. t9 q9 z% h* y
已有gui.m文件和gui.fig文件
9 K! [, ]* e7 ]8 N1 在matlab的command窗口中输入, N% [5 L! T5 L( K- D& D9 a( _
mcc -B sgl GUI.m1 l- O5 J# \/ v# e
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器 f. o: x. M) T
. g f! z% i* @4 \% `
此时仍需matlab所必需的动态连接库。& a" J/ {) _2 l0 f
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
' Z6 C! B# q3 E5 }* \4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,
* W) X. `" p* O" b+ ]其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共' ~9 Y# w( v Q$ q! [
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。" c' e G7 z' t; e8 g* R5 R
而toolbox目录则必须与应用程序同一目录。
' {/ k" `3 I5 ]) A7 }' f) Q
m" P" K3 c' S+ r& l/ K! c! U方法二:3 S. R6 o% r; @7 x9 |
2 |, D- I% F- j) E6 jmatlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
! @, w5 U; s) f: h' V; u
# n. P) P& X. v1. 转化为c/c++程序并编译为.exe, z3 Q1 m+ [4 f7 o/ o
先验证mcc是否可用,用matlab中的example验证即可" z2 B; ^: B# P( ? R' N
建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)/ y0 i( A# M2 U+ Q; T
由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
4 C& }& S+ n) d9 a编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等/ T8 O' y/ Z0 r' e5 b
程序发布需要.exe、bin\、.fig
* o+ D& c2 C- R: ^- x: D3 n- E! N6 p
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件" N$ u/ l; r$ E1 h% {4 y
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
7 L; Q, t& S& \0 g" l4 C- ^, V另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
3 t7 t# \# v+ H& B3 {, U! ?" F2 z- M5 U, i" m
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
% U+ |5 m. T* A6 h% u# C0 `以下通过注册表自动添加path路径: h. } w" }* \1 m, c j+ r& ]
%————————————————————————————–4 X( t# T/ }; z1 W
Screen.Next(); — 进入下一个屏幕
( p) ~: C% {9 ]0 r3 \& U( N( PresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);( H( W- ^/ t+ G6 z; X
if (resultDialog == IDYES) then –加入安装路径
: B" J" T3 h& @ K7 D) ]strPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);
9 m* Y$ a* g( ?& O if strPath ~= “” then
4 r6 x+ ?* H0 |& e strPath = String.Concat(strPath, “;”);
- w% c P0 J" }3 y4 @! send* Z% ?) n2 n5 N; J2 T
strPathToAdd = SessionVar.Expand(“%AppFolder%”);
7 l. `1 N9 B6 n* w1 p, O( astrPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″); X) }; k3 a" C7 z
— 如果路径中无该位置,则加入
) J8 I8 N3 h1 T2 F# iif String.Find(strPath,strPathToAdd) == -1 then0 `# N V/ H/ t* q4 r) V7 ^, B
strPath = String.Concat(strPath, strPathToAdd);
) V" P2 Q5 z3 t8 D+ n" e! t Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
9 e$ h3 l& ~/ q" E# J! h end
7 `( m) _5 c! b) p; a- nend8 D& g0 q ~3 W' g* `6 b
%————————————————————————————–
; I5 Z+ [1 G L/ _( k" H方法三:
& F& i: f6 q' _1 z4 i在网上搜了一个方法,还没有用过, 贴在这里仅供参考:) p( ?6 @( W5 |5 n
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---# |. c ]4 D$ P/ i
首先,使用mcc编译得到.exe文件,具体参数见帮助文件;9 i" D+ b2 x- |
其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件* N' q, u' |. l- U$ ]; {* l5 j% ~! }7 {; e
第三,在MATLAB环境,执行命令
}( m( M1 z, w% b, Ymcc -m -B sgl file.m
# I+ D4 r4 C" h或者 mcc -p -B sglcpp file.m+ R( k2 C: M: ^( r* K& K
请键入help mcc看帮助。
0 g+ @0 G* J) g/ l% _& h% K- _- lmcc是在“command windows” 用的吗?
* J' V) n% b% R( G7 A2 h" p只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.4 q9 Y; t0 E6 d2 C. F- r
还有“添加环境变量path”是path到.exe文件的环境中是吧?
1 {' Y' w4 [2 S) b2 W4 y. b# C. x, D. P
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装3 |: \0 O- s G9 F5 ^# M0 i! B
三、 如何将gui生成exe ?
) k: ~( Q: s, R$ g! m [4 X已有gui.m文件和gui.fig文件
+ r6 Y* S+ B9 M$ c# w4 G3 P1 在matlab的command窗口中输入+ o# l; s: ~; ~7 `# C
mcc -B sgl GUI.m
7 O3 F( n4 t) z1 h2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器8 k8 K& k6 l T1 I4 m, D
此时仍需matlab所必需的动态连接库。
* g- C6 n9 ~( E* b( g# f3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上8 H: h8 @- J$ o1 z$ }
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
& N# o. w5 [0 x, q8 ?: V5.大功告成。 . G' @5 u; ]* i% ^" @6 z
- ]# t$ }/ s0 |# y4 P2 ^外一篇:MATLAB M文件变exe文件
; a' W4 a9 F1 L- S2 U7 E7 L我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序, w8 I( {5 k+ T. h& L, X. A" i4 P
希望这些对你有用
" B$ Q/ y' I1 S+ S, Y3 W: p; v6 N4 [5 q1 X7 B- n' A- y4 W* q
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:" n$ P5 M- b9 O) ], j8 b; n7 |
7 n. V! d4 ^7 F* ^8 d! u6 B一、生成独立可执行的程序(exe文件)步骤
, t- K, q% j! B$ c# z, r5 N. x" w. c$ S; r4 F. ?: S; u
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
0 g3 h1 P) E- t) W( \2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。" J0 r( N) f4 r7 M. k/ H( p: _
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
- s( e" Q3 C2 Q/ u当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
( @7 ^/ D# I7 T6 |注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;" h" a2 K/ d- |$ T6 z
4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。; u' ]! ?( [1 [- q) A. z* h3 W
" F# |, S7 S3 M P: p5 a二、脱离matlab运行可执行程序# n( N, L6 X' N1 B/ |
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
3 \7 l7 L3 K9 p \toolbox\compiler\deploy\win32
1 U' q5 }- ]0 p2 C: n9 K7 v* |2 ~* r5 T文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
& R$ o N7 j6 h1 E在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。; i8 x7 E- J5 {( W, }8 K' k
在其它没有安装matlab的机器上运行exe文件前:; G3 I4 d! g' X, E0 I* H; h( f
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
5 Y5 M8 W5 Q: m其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。
( R" E' U, U& A0 a {5 c如果没有,也可手动安装,添加的方法是:
4 e, o' [( M. ]3 U' _' V% u右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
* T3 p. q" P0 `( w( S, f注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。! K3 U+ w+ S% f3 x' ]# n' O
最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
f+ P; B8 P2 }& V+ N问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。+ \2 p* B' w4 }. a! V
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
, _( s( e$ a0 |! B/ A5 R5 E4 J4 [( V4 m7 V" A) O2 j' F2 W) u
消除运行MATLAB生成的exe程序的dos黑屏的办法2 [. G2 I' R- ~+ {# G9 V
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:
6 n/ v; m4 h; p9 @& ~4 K2 [& E方法一: 在命令窗口输入:
) l F6 n. e/ |" H; W' C0 P" mcd(prefdir)) L, B3 }9 i: x1 F6 e: V
edit compopts.bat/ N. Z) Y" @" b1 {
在打开的文件最后添加以下语句:
* h' ~' q2 `* k4 a" \0 t* _- B6 v5 z( J- v/ J
A.VC环境下:
E5 d& G4 v5 Z* G1 l, Q8 ~
; n( j6 {8 s% ?) x% Cset LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
, l5 V6 g: V; Q: c9 g
4 G1 o! P# h( c9 PB.LCC环境下:
' a5 e4 B, U4 C" {' \set LINKFLAGS=%LINKFLAGS% -subsystemwindows
; a3 N8 M; V4 F2 G& Y3 B
2 m" ]) M7 }, Q9 \- d) S H5 ?C. Borland:# z1 @! j( [9 J3 R
set LINKFLAGS=%LINKFLAGS% -aa
2 @/ s. `4 v4 p' {4 h
/ e3 K% u3 G3 K保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了5 i [5 E6 y. a( U/ h) z
5 y" ~6 B1 U6 z& }) N3 M. Z/ m8 o
方法二:使用suppress工具:+ y2 n H+ I, |) G
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。0 ?& x" r8 J* o) e
: X8 }; t1 @, a9 y$ M) f8 ~其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。4 _8 d: s* m7 C, P
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。, d7 p+ _* X: k; N7 ]6 P
|