matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:
6 d7 Z4 K" j) T! ?# P$ A$ {9 ]7 V! S0 d+ C ^3 _7 @, O! q9 a( b
1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。1 {" \: ^+ c# g" c' E
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
$ G/ C; p0 D b7 P4 T" P虽然生成的可执行程序可以脱离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
k2 L; K6 a: x" Clibmat.lib
' k0 _9 I+ h8 |: q# Y5 }+ Slibmex.lib
T: u* L2 ^, jlibmx.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"。
) O [ r7 W8 c" n4 Q9 i& M ! Y) v; k, t1 R! n' _: A5 j
1.设置编译器:
1 S* v5 F" F4 z. [在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
3 J# J7 S5 W/ X" X3 wMbuild –setup, 按提示选择matlab自带编译器LCC。$ h+ d2 n( Z) r- o& B" \4 D. d
7 n w4 [7 b1 e) P2.将脚本编译为可执行文件:
% M* J' K% @- P P6 _如项目文件包含:gui.m, gui.gif, fun1.m。0 X, ]% u6 u' b$ t8 q; L0 N9 b) R6 o
. J9 j! k2 _3 ^2 d. s
在此路径下命令行输入: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环境运行必需的文件。
$ J, f1 ]$ p0 j$ s N3 r& I. }- t; W- j0 I3 q. O
3.在未安装matlab的机器上运行可执行程序。
+ ^" ^! B' Z9 [1 a4 }5 T将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。! i D+ U5 i$ c
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
2 i, P" N; u) A2 G
! a2 X* l: Q0 {6 v3 u. _0 s4.去除独立可执行程序运行时的“DOS黑窗口”。
; G! o6 e+ ]5 R3 E3 A' t; Q+ U9 ~以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
% x/ o" A# Y/ @4 n4 B/ N* u: w& D
matlba命令行输入:
9 e3 N e3 L, L) D
+ h3 z3 e; M" Z/ f* ~cd(prefdir)2 ^! n+ R( h! Y
edit compopts.bat) ~; ~! C! f! ~9 [
1 u0 r( ^6 c" f; I
此时compopts.bat打开,在文件最后添加:
C9 p/ g& u m0 \1 T2 v/ p$ j( _% ^* i8 H0 U
set LINKFLAGS=%LINKFLAGS% -subsystem windows
: Q6 p" g) h, {/ K8 R5 n1 Q& _$ ?) i( Q" O, ]. L) w
如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。( x5 c4 n1 i% }( @2 q! T( M
3 t0 x y( l# }4 [0 L. e# k另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
: D! f8 D! L* }+ k c4 ^" R
+ _+ U/ X6 f# zMicrosoft Visual C/C++:
- F1 V) z$ y# [& m% r- X" t( q& }5 B" V+ U, E
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup& w5 D; X$ a: j+ B, w
% t2 ?& y2 e6 Z( E' `- J- F2 WBorland:
8 Y8 Y" ~' S5 o+ C/ R& { X6 H; e% f0 F
set LINKFLAGS=%LINKFLAGS% -aa1 Y f: g+ n9 m6 e. z
———————————————————————————————————————–
2 q7 d* x$ D9 N- m8 k% ~: Z. H
. F0 i# l' l9 v+ B' I' n方法一:
( L ^8 N. b! Z- O% o( K已有gui.m文件和gui.fig文件1 _9 G8 A0 i8 |- [) J7 W6 P8 ?
1 在matlab的command窗口中输入
/ w; _+ n4 u5 @) D" F4 X$ U& omcc -B sgl GUI.m
7 M0 C! k* p5 c5 B/ c- [0 v2 E+ `2 ]6 e2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器6 Z1 n, Y; Z1 ^; w( e0 ?4 D" V
, F$ K( D J( E$ t5 l$ j此时仍需matlab所必需的动态连接库。/ ^, f8 @2 m1 U% ]
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上' d; l" ~- c- O3 A) ?" s4 ?
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,
7 g) X: m* u9 m其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共7 K/ m3 L- L% |( @/ o* q' d1 U* m
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。8 N6 ~8 ]4 T/ X) U
而toolbox目录则必须与应用程序同一目录。
) |" f- ~9 s+ v* c
3 J% p; b: e) b3 L% ^3 ?$ }方法二:
9 o c; ` F5 v2 k U7 m6 e1 P" T- {- [ _! D
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。3 x0 ~! D: H9 o
6 s- X/ C, T7 p+ d/ O
1. 转化为c/c++程序并编译为.exe1 Q- C- I! z+ _8 G( L. V
先验证mcc是否可用,用matlab中的example验证即可
# N% ~8 {; ^6 q' N6 i7 e: H C2 t# d0 E建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)8 U/ ?0 \1 W% L6 S# H9 N/ K
由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure3 x/ j+ u& n/ g) y& e6 K
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等
1 a4 A, F2 |+ C; x2 A: R程序发布需要.exe、bin\、.fig) N0 y/ V) `9 p: ^5 b/ P
+ G6 @+ ], j8 Q/ U2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件5 ^3 m% H' C( S& I1 X4 A5 G
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
* b2 X+ ], i" m0 O另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同/ G6 |4 F9 O/ l: R5 \2 S" A. C% f
) m, R Y* y6 z6 ?# V+ O
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
1 s' u. {3 b3 Y9 x3 i2 f以下通过注册表自动添加path路径
/ C: F b* M! F%————————————————————————————–
: W( f1 l# X6 {1 M$ YScreen.Next(); — 进入下一个屏幕
1 G7 a5 h" V* v' ?6 Q0 sresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);; _6 E9 P# m9 \, f+ z
if (resultDialog == IDYES) then –加入安装路径
; V% w: [& a$ P* Y) OstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);8 { w6 k0 [ C6 ^; P9 M
if strPath ~= “” then" T9 J( B( X4 t$ K5 i
strPath = String.Concat(strPath, “;”);
% X: W, Q2 [* `end
# q0 B$ T4 R& v5 Z( ~ strPathToAdd = SessionVar.Expand(“%AppFolder%”);, l5 L7 o* w/ L: k( [0 W# }# n
strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);
, W4 g1 U2 Q; H% g- R* m— 如果路径中无该位置,则加入
2 S; A( [. H( U$ ?, B- bif String.Find(strPath,strPathToAdd) == -1 then
$ e7 u4 X9 n6 R- i strPath = String.Concat(strPath, strPathToAdd);& h1 |- }$ I$ u. d
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
, k3 X" h& q4 r3 \+ \! r end# E& n! z$ m! W7 T* T6 c2 R
end0 i+ c$ w, A, B# y9 T$ { U
%————————————————————————————–
' n. n6 X9 r2 S; U B; G方法三:
4 n& v! I( R; C* c在网上搜了一个方法,还没有用过, 贴在这里仅供参考:; q3 E* q9 S: C/ G* r. O% u4 F5 T0 V# x" j
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
4 V/ S0 i; |5 W首先,使用mcc编译得到.exe文件,具体参数见帮助文件;) b& h, ]& i/ z+ f) Z
其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
/ Q3 }% O4 ]4 v' `$ p第三,在MATLAB环境,执行命令
1 K' U" O8 N' R2 { {mcc -m -B sgl file.m
4 a4 H: g' ?1 x; ~: x/ n1 u或者 mcc -p -B sglcpp file.m) a) c2 `* b% h" F7 \9 h! q
请键入help mcc看帮助。. `6 |; I3 t; O( N! f6 t9 v
mcc是在“command windows” 用的吗?
6 W: B3 E4 p2 {! d/ n只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.+ G, c; j( B( f
还有“添加环境变量path”是path到.exe文件的环境中是吧?4 ^" i/ T0 s% K
8 h4 c8 o; P& w- Y
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装; d. P$ l0 z8 U4 V' C
三、 如何将gui生成exe ?
$ O" ]& p9 v, j( m) N9 [已有gui.m文件和gui.fig文件
+ k6 b r% H% ?% n" S3 a1 在matlab的command窗口中输入" U& a3 m: k5 l4 |
mcc -B sgl GUI.m
_; B* e& F {# r# E! N; k2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
2 t/ T3 f+ h! \# s& K5 R此时仍需matlab所必需的动态连接库。/ z B* j: k0 u" d2 Z) J% m- D
3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上
9 G- p. Y2 ]1 P% X0 H: L4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
" c; d! S' g& `3 G9 Z5.大功告成。 / n0 {7 h2 Z& I' F
9 b1 V5 N% N# U7 h6 E5 ?外一篇:MATLAB M文件变exe文件! c8 j9 G; H7 Y
我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序: x" c* ]) ~' M _
希望这些对你有用' G% a3 c& j8 u2 a. k$ d
L9 i, V4 n4 g; L" U
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:( k4 n2 r3 ^5 R% L) f d
" B" c8 W! o, H3 T2 U/ d* I9 n" c一、生成独立可执行的程序(exe文件)步骤7 q o; I, O( y$ F6 W# t' n9 m1 L0 b
1 [, } w" U- a0 _" ] T1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
2 \4 @% u" R& K6 x9 p2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。* X8 o D- \8 Y% a. e% e
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
, r7 G: t: u* Z9 p" k C当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;1 r! [/ u; K: q1 v% W: s
注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;9 m, A3 s9 [8 y0 h0 Y- f2 B
4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
* B! |: T6 l9 p- [* s4 r- h1 Q0 s: c! S: a
二、脱离matlab运行可执行程序
; Z% D4 `1 m; AMCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:5 h7 N; O. L! B7 z8 q
\toolbox\compiler\deploy\win32
% N! W' w( s. O1 k7 g6 ]1 d3 O文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。* L, U6 W w9 X2 Q* K. i" E9 B' ~
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。3 C8 E' w5 Z5 ^, v
在其它没有安装matlab的机器上运行exe文件前:9 D0 ~, n8 L, J+ A3 k
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。0 e3 j g& x2 o( V8 T) q2 a* _
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。9 V( C" T# v" j
如果没有,也可手动安装,添加的方法是:1 A8 Z" g& a7 E; z+ [" O& l$ T
右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
% n1 N& R) N4 H$ p% r注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。1 N- O0 X' S0 g+ M
最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
4 H) j5 s- X3 c' I+ ]& Z问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。
8 y9 x f% L/ q" h美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
/ i- n6 Z% \6 Z/ n/ U
! k4 T7 E! e+ y2 {# ~3 S4 Q* b消除运行MATLAB生成的exe程序的dos黑屏的办法
% S4 r; u5 E- ]) i基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:
9 N, M3 V" Q. U& h. z/ p& G方法一: 在命令窗口输入:
) K5 T" w; m9 }, d- n# ^1 Ncd(prefdir)
0 Z, M# G- l4 y% I* [8 p$ oedit compopts.bat
! t" ?, j* F# y% Y* W2 @) _. q3 i在打开的文件最后添加以下语句:. ]. _6 }* I; S! @+ ~/ W- Y& k
H0 F" P; Q Q1 E/ z" F; Z
A.VC环境下:
( C* ?# N& ^/ u4 L/ H) P6 d* W/ E0 l4 V3 a2 ~' }! H7 U5 y
set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
( L/ K o& A" X( f
/ \8 E9 Y2 B; b* R: GB.LCC环境下:
: r7 t1 p" T" d% E2 O' Y( M5 |set LINKFLAGS=%LINKFLAGS% -subsystemwindows 4 J8 q7 A3 X6 N1 O# H& K) ^8 H L
1 M) r4 @9 z9 RC. Borland:0 S! {7 g+ R) i& ?: J
set LINKFLAGS=%LINKFLAGS% -aa
8 } `: l- V; F3 _. ^$ J
6 z, y7 R+ D) @2 x8 P4 g5 }# M6 e保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
/ P0 D3 V {# e8 z q+ _1 X* n4 O' i0 O) ~- `, O$ O
方法二:使用suppress工具: {; O# C) W0 ^6 E9 R; E
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。1 ^' I* x" ^/ E2 K9 p
2 V- H& \' |! `/ J9 h0 `: d: K
其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。 k9 ?6 n( p$ m& A7 o
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
0 T" t% J1 f" I" P( T! h4 f |