matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:) S R; ]) k& k1 u4 ?5 }" k
$ L' A3 m2 T: Q9 M( t( `: b1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。8 A- Y$ A, J* j+ s& n* ]3 H8 ~
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
4 P" Y; x$ t. o! J* \" a3 ]虽然生成的可执行程序可以脱离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
/ m& i r% e& N" z8 flibmat.lib
0 _$ ^9 l/ {+ @3 e/ w: P$ E0 _$ Nlibmex.lib
$ @8 k J; O& D1 ?: x& [" zlibmx.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"。
9 t. p" j7 j# B3 L) q, }1 N+ B % |5 j# O- l7 c" Z; j" D8 @' H5 g8 w/ s
1.设置编译器:
1 j8 y; M. s0 s: `7 j0 y在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
' S+ K. k% ?3 @+ B1 j) B; TMbuild –setup, 按提示选择matlab自带编译器LCC。
0 L1 p; o+ }# W6 ~( h+ J
/ @8 y c+ [" m! p! y J; p% e6 q2.将脚本编译为可执行文件:5 [& e8 a" h U0 \8 Y
如项目文件包含:gui.m, gui.gif, fun1.m。
; R4 L& O" s. n0 u% @8 h {& P8 O% v
在此路径下命令行输入: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 f: U6 Y) ^$ |) T6 B6 o
; V) H8 ]& K( q/ Q7 g% |3.在未安装matlab的机器上运行可执行程序。
6 v1 X, |1 ^4 x' y- g将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。
0 X7 s3 X0 X/ k* G将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
- E% ^7 b. k7 ^' o# W9 W
. S7 N" |, v6 J# z: q" A4.去除独立可执行程序运行时的“DOS黑窗口”。
6 S: W8 R/ ^7 B以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。 Q3 v& S5 j+ s. o
( b) ~1 y' W! G" gmatlba命令行输入:8 L+ L! i; L8 K1 k6 ? ]
, L" M& T- V' @cd(prefdir)
- T1 z+ X* T# ^- X/ w- H( x4 Sedit compopts.bat) I; H* O( l8 }2 [. ^
% { d/ p) P2 L# N, x, |此时compopts.bat打开,在文件最后添加:- ?; e/ R, \6 w7 Y
% W& J$ I0 o N
set LINKFLAGS=%LINKFLAGS% -subsystem windows
1 G+ }. T& l" k3 i+ U& ~1 X5 H: v
3 A* H1 J) Q6 Z如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。
. _# T1 T: a$ v9 t! @
/ ^% Q h$ p3 N3 j" i _另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
9 \ J) `" _* W, G% r0 M
2 Q2 [' }. r/ U! p0 Y; j1 q) l* [Microsoft Visual C/C++:/ D; G( A' p& v: l9 t: Q# M
: {" t. p: k: M- ~! n: t5 l' Xset LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup. q9 G0 x& Y* |+ b
! i" t5 F/ N3 M' \# H
Borland:
( A1 T8 f5 l. k" I8 w9 p+ ?5 S) T0 B- n3 Z- s
set LINKFLAGS=%LINKFLAGS% -aa
$ f/ v: j$ _4 {' Q) X/ z———————————————————————————————————————–
4 C8 t/ p- f7 F6 }5 k/ m: P* {
4 ^( Y8 W, ?0 y& g _+ M) B方法一:! ], s" F0 e' L: d
已有gui.m文件和gui.fig文件+ I) V1 q1 U. |+ U% C: K
1 在matlab的command窗口中输入+ P- u6 E% F9 K% S
mcc -B sgl GUI.m
- G1 R0 Q6 F& a2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
# P4 V6 Q0 a4 V; g; T. F% N! E9 I! N# W
此时仍需matlab所必需的动态连接库。7 v7 w( W! Z1 C# R( j* e2 ^
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上5 D$ C( W) t! ]( H; i1 {! W3 J
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,
, K4 _* D3 x3 \9 y+ P" f其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共
$ i& w' X" u' f. A A! W* J有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
1 U0 ]5 S4 n9 o+ q而toolbox目录则必须与应用程序同一目录。
2 x' Q Q P5 a2 i4 p& O7 |0 x3 P' u- \2 O1 O* l0 a9 j
方法二:
0 @: x0 u0 c% m; [7 | Q4 W
5 T& D( y* l! `: ~/ H$ a; Nmatlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。" F+ a$ y: L& l/ v
. p4 f, p! s+ Z, r2 L" A7 q v
1. 转化为c/c++程序并编译为.exe9 H4 \8 w6 N6 U8 z/ S# N
先验证mcc是否可用,用matlab中的example验证即可4 C1 T/ p) ?) K! V- M( I5 E; B2 I
建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
( B" Y! M, N7 a0 o- o4 g由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure' f! ~3 e( f6 Q2 ~$ z7 j& T
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等
9 [$ w) N; v7 l! P程序发布需要.exe、bin\、.fig$ H4 B$ L3 N" i7 h2 ^5 S) Q4 n
0 v/ i0 i2 O/ q' q' h: _2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件& u: ?. r8 ^- y& b$ c
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径5 ^ a3 I& X# c) v0 v: j$ N
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同8 C! N% m- e3 q5 W O
. H$ g" R8 B1 K9 I4 A
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
- l4 g( \8 B- Q) x7 A% ?以下通过注册表自动添加path路径7 K! l' c% y% A5 t# q$ ^, i N p
%————————————————————————————–! ?' ] I ~! `" ?$ e
Screen.Next(); — 进入下一个屏幕5 }+ R9 ~2 G/ \( Q) C, R
resultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);0 M) H% s q- l/ t1 e2 u5 [) e9 g
if (resultDialog == IDYES) then –加入安装路径) m- t# _, P+ C3 N; u, f
strPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);
0 V q/ k4 p+ s# [ R if strPath ~= “” then
& H+ p+ d$ e" r( P, f strPath = String.Concat(strPath, “;”);
& [0 T' o. w( H5 j4 ?1 \- Uend. n0 n8 _& g7 M* N) ^0 R* n: J: b
strPathToAdd = SessionVar.Expand(“%AppFolder%”);) F3 d. |6 I2 I8 [9 V3 ?# W: ~0 c
strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);1 j8 l+ R, i( p! M; q7 C
— 如果路径中无该位置,则加入8 p1 v1 X1 a7 w
if String.Find(strPath,strPathToAdd) == -1 then
9 t; w8 [4 \$ n; m. ^% }! ? strPath = String.Concat(strPath, strPathToAdd);4 t8 m- O3 b+ o" e( g$ e
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
/ r9 i3 k& F# b. d z3 X' l end) r" i5 T: w" ?
end r1 w+ z0 K! s
%————————————————————————————–
) x" f u9 K; j l$ ?方法三:
# J, N; k* V3 ]在网上搜了一个方法,还没有用过, 贴在这里仅供参考:
8 h: z& h8 X. ~一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
8 `5 [, ?9 q' m* I- w首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
) X& j1 o u) r1 n/ A8 E( v: o! E# f其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
: F f! \1 D$ {1 ]第三,在MATLAB环境,执行命令- U1 L% T8 D5 T& N
mcc -m -B sgl file.m
( l% d( [ b# P; s或者 mcc -p -B sglcpp file.m/ _' t/ x A7 r* K6 }, [
请键入help mcc看帮助。5 Z) n' A2 T$ N8 ~ P; e8 H
mcc是在“command windows” 用的吗?
6 b* L: o' X5 `0 _8 X& b4 C& [, I只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.
, j2 ]' ?8 y! }$ O* {2 k还有“添加环境变量path”是path到.exe文件的环境中是吧?
+ u c B% l; e$ W- A8 l* t
* `8 h& ?3 u l3 k w6 C$ e* |& J二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装9 z9 q0 Z& Y. C4 i
三、 如何将gui生成exe ?
2 i. ^4 v' d0 l3 r$ I' Q1 k, r* H9 l已有gui.m文件和gui.fig文件& L' `2 @7 O1 x2 X
1 在matlab的command窗口中输入" x7 ?7 b4 S- t7 q
mcc -B sgl GUI.m9 F. v f. \) _3 B
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
A& F( {9 h: R% p此时仍需matlab所必需的动态连接库。
/ m1 f, j0 M7 B% z6 ]+ L" s3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上- `- [/ K+ i6 ^4 w$ \5 u
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
, d% z8 N* H/ I% w# {5.大功告成。
1 d/ I; v1 x8 c% ^, m* Y1 u: x* J6 u) l2 ]8 M8 `8 r3 ?
外一篇:MATLAB M文件变exe文件, ~1 v% Y, [5 Y. {( Q2 |+ Y
我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序
, q" R/ @/ K! v7 E希望这些对你有用
3 X) j# ^. c' Y0 O% O% w9 [/ j4 z X$ G& ~
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
+ f/ m$ z/ H7 O u. g- }5 `0 l& X# c$ Y5 p2 j* a( j: D* {
一、生成独立可执行的程序(exe文件)步骤
! Y& ]8 Y1 n3 L6 Y$ ^
- m9 U, D. T7 k4 [: I4 s$ L' i7 g1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。- I! w: {, K- Q) ~1 I' C, S8 F1 J2 d
2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。2 C, T0 W* g1 a7 E' t4 j& t+ N
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。1 P& l8 L% a! _# n
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;* Z W2 l6 L8 g* f5 g. J. p' e
注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
2 Y' {: ^3 ^! s+ n. s& i% U4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
2 e. f. l" s+ S2 q5 x+ C
4 ~; p# [& N' k8 d/ V二、脱离matlab运行可执行程序, C D' |: |* J, H6 H- q& i# V
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
: s, ?: L. X# H/ N# K/ ]0 d ? \toolbox\compiler\deploy\win32* h- j! x! l5 V0 M2 s8 S: G2 v
文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。3 a/ m; N* Y! x
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。
& [5 N/ q* a) x1 D7 R) `1 l% L在其它没有安装matlab的机器上运行exe文件前:) I* Z4 n z& Z9 \% H& }
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。6 z# Y7 A; Y* k S& P
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。4 o$ e% `' }% f& j( B8 Z
如果没有,也可手动安装,添加的方法是:
$ z+ h' K6 f$ y+ R右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
- @* x% E F* k+ |3 v$ y- b+ }注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。% S: t) v# J# U- N ?, i
最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
- M4 T8 ?, p8 ~7 {7 H7 t问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。2 y/ K y/ ^8 M5 |* o8 ]
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
$ r! ~7 p: t' F- ~' I' u/ t2 s. F1 f/ t$ k# [
消除运行MATLAB生成的exe程序的dos黑屏的办法0 Z9 l) ^; l" w, D/ |- H0 X1 R
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:
* N/ X% e7 k, z3 x1 c& k方法一: 在命令窗口输入:; E! A2 _- E* Z* A: `+ U3 F
cd(prefdir)
! Z) b7 h; T* }! j- }! Z! y% l# qedit compopts.bat; d) ?7 L+ G* E. o h6 s
在打开的文件最后添加以下语句:
2 X# a9 ]. W# ^0 \2 w' C- x% ~( Z) e+ g+ d: w+ L
A.VC环境下:" @ Q$ s- j, L) n
) k ^2 ?- J6 j$ Nset LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup ; K- ]" r. y* V: [; H r
# S1 J' y6 c" o5 t/ x; I. g
B.LCC环境下:
( {- D1 f: N2 V: v9 pset LINKFLAGS=%LINKFLAGS% -subsystemwindows & x' f( g$ K6 \
" G+ n0 G- P: r7 u3 }9 J' L( k+ r
C. Borland:- U% `8 x- R* J& i
set LINKFLAGS=%LINKFLAGS% -aa
o7 u9 b# L, U( t( Y
7 E4 o- p' m) @& E Z3 v# }保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
. e2 B+ H/ m& [* ]0 i A. x# q+ y9 j# E& k# O+ b- J: V; x" `
方法二:使用suppress工具:$ C/ V" I- f& U/ G9 L6 ~3 _; e
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
/ g& ^- ?. Q; C8 m) u! J4 T+ ?: u- }, S
其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。/ V# e0 c' h5 M1 r k
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
& d( x2 G' J% L8 w0 h |