matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:* H/ X( t- N# [/ b, ^- z6 }/ X
1 \: T6 J2 o9 e Y# d( w- K+ r' F( I( h1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。1 F) p, m7 H& X' k; K3 G3 L* Z: M& e
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。( c2 \% l$ U- O" M# }; O1 @
虽然生成的可执行程序可以脱离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* z9 d2 i( _1 }7 j& S
libmat.lib
I7 y: R4 C: s5 k( `libmex.lib/ j$ M* _3 h" T! s9 R
libmx.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"。 ) Y" O+ T1 j+ f3 O& R' n
3 [& a, l6 \* A5 h1.设置编译器:4 {" l, c. p' P. A9 D- T+ o
在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
$ y0 s. l1 ~ I# PMbuild –setup, 按提示选择matlab自带编译器LCC。& q" |: g7 f. i
, n) C$ R' W3 ^) o% { k; m2.将脚本编译为可执行文件:
- Q6 f; H3 b% C4 ]1 Y如项目文件包含:gui.m, gui.gif, fun1.m。
9 c1 w/ F" p. L( A1 ^- }& f i8 h7 R9 x, ]
在此路径下命令行输入: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环境运行必需的文件。4 @8 C3 H" ^; R Q8 P" l' T
7 X& V7 `& t5 ]4 b! e+ g% i3.在未安装matlab的机器上运行可执行程序。
6 m$ b R# ~" G% ]/ v7 e8 S将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。* u0 O& J) h m0 f- A
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
, m( \& J _6 R6 o
) _6 d2 b& x% ^+ n( D! x4.去除独立可执行程序运行时的“DOS黑窗口”。
" }4 `4 X$ K j' N4 x& u以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
" s) T: k$ S9 W6 r
" \( {; a, F! K9 Ymatlba命令行输入:
$ @, l: h5 i8 g$ H, `! g# _! z2 ^; ]) q$ e, P! N0 k0 c( M; \
cd(prefdir)$ q: I! ^' F E# c6 L# i- e1 G
edit compopts.bat
- t, @' Z+ R% A0 r. U% O
) }, Q: @! @2 U- S& |此时compopts.bat打开,在文件最后添加:
w3 t% W/ S' U* o
V6 p- {4 U2 D+ O. A: Mset LINKFLAGS=%LINKFLAGS% -subsystem windows
) y3 B! u0 n& ?6 A q1 q! @; s9 @- [1 X2 n
如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。8 t+ i: j8 x `
9 L: W$ D: a) y5 f# V+ e另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同8 o. v) N3 |1 i8 `/ Q6 S' ]
7 h0 f: o) f7 ^Microsoft Visual C/C++:" @3 Y# d4 ]8 m$ y5 o' { ^7 W6 L' G
$ o* `3 u8 c0 Lset LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup( @1 A) t) O. v- m
1 E' e& q, s$ a2 s0 F5 X0 f8 H' HBorland:
" ~$ R3 \6 R0 P! k, ^
3 Y$ i) j0 o; D+ J$ rset LINKFLAGS=%LINKFLAGS% -aa4 |, R) _! C N5 C: F$ e
———————————————————————————————————————–. f* s0 U5 S. l. x8 c- T
& ~. l% l: W( k方法一:% E7 `4 [) U: e+ j# R3 ~4 n
已有gui.m文件和gui.fig文件 E- E; p* i s: p0 f$ B. W& v
1 在matlab的command窗口中输入
+ y" Q; k. y5 y7 w1 @$ pmcc -B sgl GUI.m
7 Z: E5 S5 U: Z6 [" y8 r! w- z) W/ y2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器; ^4 u e1 H3 V. e1 F
2 { [% H: F& j; k7 D2 A
此时仍需matlab所必需的动态连接库。+ N: J& V: _$ x: g+ k4 T9 ]
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
6 V6 Y) n- |) O4 P3 V4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,/ {! }% f$ s3 k1 z& ~% c
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共 Z( f. g1 J9 c6 v
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
1 G* W) ~1 {- b+ N! p# @3 b) ~而toolbox目录则必须与应用程序同一目录。
& d% q) w8 Z9 G% U; U
g8 z7 \* @# e8 r4 ~方法二:
+ L4 C- _6 V; u' ]" m' I- r _- r+ @' n3 |
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
s; k& v" U+ G. C7 u/ b, e% p3 M/ R
7 t4 A( h7 l. {9 u$ G1. 转化为c/c++程序并编译为.exe; P1 i. T/ Z$ i+ ?2 }, b! O
先验证mcc是否可用,用matlab中的example验证即可6 r- n4 X; v' F# |- [% J
建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)8 H* L' N0 {4 X3 L' i! h
由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure8 |1 T4 M& k' |6 L
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等* W$ D- F1 m* |8 v5 v! \
程序发布需要.exe、bin\、.fig( S8 F) W; o4 \$ l Z) H
; i- W. ^- E5 H. p4 r
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件" s+ C! l6 \2 F$ X
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
- U- A4 k6 i9 }% ^8 X, I Q$ S另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
* H. ^: _( [+ M& B
! f& q6 q5 W$ a# e3 E3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
# l. k; O, H+ J以下通过注册表自动添加path路径
) `- x5 z8 D* M%————————————————————————————–% g9 H; @& R/ ^$ L L; I
Screen.Next(); — 进入下一个屏幕
- X# M ~1 V8 I" y+ |/ gresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);' M/ Q3 o( B# \& Z, f) b
if (resultDialog == IDYES) then –加入安装路径
& s. L9 ^( e! O/ ?1 }& g# UstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);) u2 S2 J6 A+ k/ R* y: r- [, l
if strPath ~= “” then: E' r! M; V; Z4 v }4 j. X
strPath = String.Concat(strPath, “;”);" e3 ]/ q9 E1 a0 {6 f
end+ a* b [+ r2 [( j
strPathToAdd = SessionVar.Expand(“%AppFolder%”);
. c' p, e8 A! Y0 P/ ~5 H0 I; G; jstrPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);
0 [4 M" }! V6 J5 m; f' n- A( m— 如果路径中无该位置,则加入5 G9 ]( a; Y% d5 ~& f8 {4 a
if String.Find(strPath,strPathToAdd) == -1 then
+ z: D5 R n( q$ B c/ W. ` strPath = String.Concat(strPath, strPathToAdd);- B) M! J8 d* [2 t
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);8 m1 k$ M9 t5 F* F9 _
end+ Z. f! L4 B& G9 f6 h: V; Y/ E
end7 e2 l! S7 h# U" P) Y
%————————————————————————————–1 W+ ]9 B# ]& h0 X& V8 H
方法三:+ M' l y) m. Y# y' j9 P
在网上搜了一个方法,还没有用过, 贴在这里仅供参考:
0 D" {; G+ z* ^8 M" a一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
6 [( G2 B4 V. i' ~: s3 A首先,使用mcc编译得到.exe文件,具体参数见帮助文件;: x% W' W* ~7 G* i* w% u. x5 S, v5 W
其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
3 _3 G* X0 T1 y$ p第三,在MATLAB环境,执行命令
$ f0 o% R4 P; ]1 n) P$ G) b; ?! z/ Dmcc -m -B sgl file.m1 |' s( `' S, c1 k
或者 mcc -p -B sglcpp file.m
. B, Q3 O' E. q- o) _8 c请键入help mcc看帮助。
( b+ d Z5 r, u: ymcc是在“command windows” 用的吗?. C3 K$ {( S2 j, ^. Y0 w" y9 I
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.! {+ u# O4 t2 x; ?( j. z5 t$ o/ N9 _
还有“添加环境变量path”是path到.exe文件的环境中是吧?+ {' y% S" A# e; ~, G# D9 [6 @
: Q% N7 {5 y$ G3 \% e
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装! Z/ p& c! X3 M: c2 s
三、 如何将gui生成exe ?6 A6 q; M5 l) B1 b' t9 f& F% i7 d
已有gui.m文件和gui.fig文件
: D' a. D" S. y" g" l( y% v1 在matlab的command窗口中输入
( \9 a& f; j5 D) w0 c+ t! Emcc -B sgl GUI.m4 \4 D" ]1 f: I7 `" e! p8 C0 p( x
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器' e- L5 k; d! C" j8 N W
此时仍需matlab所必需的动态连接库。1 ~& E- N! O$ A# ? b- G$ t
3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上( f; X3 S5 Z& T8 ~2 B6 P3 z
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
3 v# _8 w0 [: {7 E9 {) p5.大功告成。
, t& u. v) a/ j4 ?$ v, {2 A/ I% L* P
外一篇:MATLAB M文件变exe文件
% K$ ^$ t# j( T) u- x% A* _, Y我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序6 i o) x* i) W: n# p& q, |
希望这些对你有用) j0 c/ P; G5 r
M) f* f/ m2 E. S" l. W
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
3 I3 C" i+ n/ E; Z3 z4 r, \4 s9 h. D# B; j1 u& P R7 j3 p' B
一、生成独立可执行的程序(exe文件)步骤. }0 H5 D' \- f8 P1 c2 l1 i, Z
# m) Q0 j+ Q: A5 ~$ \7 v5 r {
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
& I4 ^% r' U% N0 A2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。6 X! k. \" z w0 u
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
! [* Z( x) ]! z6 b当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
) m3 E: C8 H; r U: k注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
$ s" f4 V: V5 {2 f; A+ L- N! W1 a4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
! Y* I8 D. v( N) W; |; o6 M n
二、脱离matlab运行可执行程序
4 e' k! A! N2 m; ~MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
' l% D: \% @* O$ \. u; k1 I \toolbox\compiler\deploy\win32/ Q$ Z2 w) N/ T( v8 I' f6 y; _
文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
: H# d& ~6 ?8 Y+ O( ~ h在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。
- |' O7 n8 \0 Y( L1 H8 ^在其它没有安装matlab的机器上运行exe文件前:
0 N, u% V+ B* b8 Q* R4 e首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。- s; o3 k8 r* E' K5 L# x
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。
$ Y" R4 q/ J# W* ~' y如果没有,也可手动安装,添加的方法是:- @" V7 H& J$ s
右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。0 x! z% M" ?. V5 s
注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
+ M/ [9 _9 \; ]4 Y+ I9 R' ^7 {" i$ t最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
! q, ~$ Y8 M4 h" t& B/ f问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。
1 L- G, g; @( ?4 y/ ^- q美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:$ c1 P- \+ i1 {+ l# j
; i* N) @) z2 q消除运行MATLAB生成的exe程序的dos黑屏的办法 \! V& p" u0 m1 D6 h. z
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:2 ~$ ^7 D: h7 [4 W7 N% g# c
方法一: 在命令窗口输入:$ h, b) _' D0 E1 ~* c3 t
cd(prefdir)* k7 c, a `" {
edit compopts.bat* Y3 E( F$ h: A; D- u& S
在打开的文件最后添加以下语句:
0 o3 H) E! @, N8 E+ y7 I
6 @4 G. M: I1 O7 Y1 ]! |- sA.VC环境下:6 T1 N L/ N$ q
6 @9 K" O5 J3 U1 X- ~; X6 k7 jset LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
- @; _: E7 X8 u1 N& W+ w2 h
5 m7 r) H& U3 z' b% rB.LCC环境下:# t0 k f5 N9 x, r2 l; k* A2 I
set LINKFLAGS=%LINKFLAGS% -subsystemwindows
" V" }. L& \4 Y. B# S( m9 ?
" R6 M& S# I! }' v+ `C. Borland:
0 Y8 _) B, ?6 H" \ set LINKFLAGS=%LINKFLAGS% -aa
4 F: d& y) Y/ i: k" [4 n& V8 J0 p/ q6 ~' s* X
保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
8 {* {* N+ X% G5 T+ d+ {8 D) A0 I, H1 R# _ P
方法二:使用suppress工具:0 b9 B! K0 n9 v
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。' l0 S7 `1 z M6 l% ~
2 I- s. `8 o2 F/ [, r- J
其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。, F( T; l) U# O5 b/ x2 P
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。- ]' g9 ~; j0 C* z- W4 b
|