matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:/ y6 w1 z* z5 Y+ a: w
' X# o0 B- S" j9 U) v& `1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
0 X3 |% e1 Q+ M) _- @1 ?) F! HMatlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
" O! R# I3 v, }$ |4 s: N, I虽然生成的可执行程序可以脱离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
0 V- _) I& U; U: y! g8 W6 s% T: Rlibmat.lib- b! [7 _2 d0 q1 L" {% J
libmex.lib
9 x8 |" o, r9 Q4 C- y- T+ c- E) plibmx.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"。 ; A2 |$ c5 Z# C! b; i
: w* h4 Z3 L; Q! C2 q- g; ?3 \1.设置编译器:, l- I7 M5 }. [' A" q$ j/ E
在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:# M4 {8 u4 P/ J s. f
Mbuild –setup, 按提示选择matlab自带编译器LCC。% |2 Y6 y; W" r
" o/ f) G9 q# U' e) R& [. G5 G0 s2.将脚本编译为可执行文件:" r* P; q3 j; `. Y
如项目文件包含:gui.m, gui.gif, fun1.m。, z/ |7 @. B. {. h6 E9 U6 l
0 e( W4 g9 q5 ^( _在此路径下命令行输入: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环境运行必需的文件。
. Z9 x' n! |- e$ N! ]
# G& W: [3 p: M3 A/ Z$ m: h! n0 d( f3.在未安装matlab的机器上运行可执行程序。
; g8 C J( F- F8 ~7 k$ \将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。% l; x- w, b, a. h2 ]
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。. q9 _0 W, b2 |3 W
/ z [% T! \6 P8 K# E2 u% Q8 M4.去除独立可执行程序运行时的“DOS黑窗口”。$ L6 k$ T! D" }
以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
v1 l4 m$ X, K. J1 O+ j* z
! d) D+ k5 Y+ m7 rmatlba命令行输入:3 K0 E. J5 a' P' ~3 g- S, }& t
1 k- ]' b0 \% \8 E" \+ J
cd(prefdir)' S' ]& t7 y' L
edit compopts.bat3 Z% P' u* X/ l t$ b' M
5 {, e% x( I$ x此时compopts.bat打开,在文件最后添加:
5 t, |4 l+ b+ p8 g' {
* |& u8 G( ~8 v* a" C* P: d' sset LINKFLAGS=%LINKFLAGS% -subsystem windows$ ?& x" w5 w1 W Y6 t7 N# A
: U* R( M& w7 g) C' \& [; _
如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。1 y' j( H$ j5 U& P" C- e* d
: z; A" S; R8 ^8 v8 ]7 x另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同. p9 N3 c: a4 R" p: P2 s
3 y2 M2 E$ p$ ` R! \. A
Microsoft Visual C/C++:* } y) Y* O ^' b
( i f u4 J8 X- K6 y5 V
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup" c! y, {4 Y9 T$ o7 |
E3 \* q& k, Y2 L
Borland:
, _* ]1 g( D' P9 D
: [5 o& z6 b6 k: t; g6 qset LINKFLAGS=%LINKFLAGS% -aa
4 P, D/ t' Y2 m% A$ \0 h———————————————————————————————————————–
* K! \5 v; i9 N# I/ N: Y F
: G' \! f6 E1 V) {* z方法一:7 y0 V4 R0 g, W, K9 R1 D$ `) b
已有gui.m文件和gui.fig文件# N' P0 }. }# g* a8 \
1 在matlab的command窗口中输入# h6 T# e/ c, @ ^( J; y
mcc -B sgl GUI.m C2 H \ f$ f: O
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
+ _1 e" ^8 u9 U1 n# ~/ j
2 ^! r8 Y! s$ V8 u6 x' o' k. O此时仍需matlab所必需的动态连接库。
+ h3 x& M8 c+ X7 {% g3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上7 N; ^' f9 X" j7 {' K% o+ o: B7 _
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,* \1 X; Z& i) k- t4 H
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共# {) G Y0 j% S
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。# [) S' v8 ?+ Z- X; Q
而toolbox目录则必须与应用程序同一目录。- d0 T5 m8 Z+ [$ |3 |3 k9 e1 k
2 l, T* F: \3 Y: T( [2 M方法二:
: {4 Q; J; a, q" y" V: R$ h1 O( k/ l# _
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
% t1 E- y6 E* R O& j
7 _" s& I8 u) o4 A1. 转化为c/c++程序并编译为.exe' j; u2 j3 I0 B( k2 n
先验证mcc是否可用,用matlab中的example验证即可- V" u5 p+ p# q0 O; A0 v
建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
) A! y9 L% N: N+ g由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
" U. m' d+ I2 y! c* @: m# E编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等- D9 h3 c+ o. i1 O }
程序发布需要.exe、bin\、.fig8 S/ k; `; Y# a. D2 i P& E- H. K6 P
4 G8 \! P( V N/ X2 X) o/ N2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件1 C/ ^' ?% \& g% e
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
3 }8 u" ^" d% n8 k* ]另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同* ]8 a9 E% T: C6 P2 {) G3 p+ B
8 T, q' { n1 T/ C! ^. Q3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布* r" p0 f0 s; x- Z
以下通过注册表自动添加path路径# _" z, H8 H' i$ m
%————————————————————————————–- A( O% A8 `* k5 L( J( w. R
Screen.Next(); — 进入下一个屏幕
. W6 H/ g% P# q5 L# _# lresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
& H) t* p4 p- A: i) c/ A' Hif (resultDialog == IDYES) then –加入安装路径
0 }: H4 E0 J5 m% r7 L* p" K5 {% ustrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);
# K' d W; C6 H% }' ]" v if strPath ~= “” then
8 ^% R* A. X( X1 \6 I9 w7 q strPath = String.Concat(strPath, “;”);
/ a8 V8 ]& S5 s# M) s" H$ rend
( X6 s6 A3 _% ] strPathToAdd = SessionVar.Expand(“%AppFolder%”);. H2 w$ r; J% g* t3 n; ~0 V/ S2 W
strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);
' \9 q+ W7 O* M5 r— 如果路径中无该位置,则加入1 m: M/ A6 V# s6 y/ X( }, h+ t
if String.Find(strPath,strPathToAdd) == -1 then) z& q$ e( h1 [: T
strPath = String.Concat(strPath, strPathToAdd);
5 z1 z/ f' o/ O: U1 t' o) V Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
( \- P7 e0 d9 @% K2 r9 L end
& e/ |, b) k! U0 ?end
. M: |8 p/ r! P7 I%————————————————————————————–
) d) w# m2 b/ |方法三:
! X" X6 T& X$ i! b( q3 v在网上搜了一个方法,还没有用过, 贴在这里仅供参考:
% u# u1 f" B4 A1 r, i一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
" T# }# _& v* s. C- X2 m首先,使用mcc编译得到.exe文件,具体参数见帮助文件;9 B( p0 E+ N. `, s
其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件1 f8 G c" g% \ N2 v, G5 P' V
第三,在MATLAB环境,执行命令/ u# O5 f$ }! j* u1 C
mcc -m -B sgl file.m* ?- I" i1 S7 }
或者 mcc -p -B sglcpp file.m
4 @8 d! r" m' a8 |1 h请键入help mcc看帮助。
- t! I3 r! a( Lmcc是在“command windows” 用的吗?5 V" d1 {; |. p. @- Y2 y; B
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.
1 Z3 X, ? g( L! ^1 K. |还有“添加环境变量path”是path到.exe文件的环境中是吧?+ q* h$ a% e8 i7 p
5 T1 |# G. i7 a# K* @+ U4 M
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装$ j2 Z7 q( A' z4 T' h, f1 K7 @8 `
三、 如何将gui生成exe ?
5 d- T1 ^& s3 u" @2 w已有gui.m文件和gui.fig文件% `1 R$ S( G' B: I$ ]$ Z; D
1 在matlab的command窗口中输入
9 @- ~ b) p0 @2 |" x! Kmcc -B sgl GUI.m
" H4 O; I* w6 J2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
" k. x6 k+ @/ x% l此时仍需matlab所必需的动态连接库。
( a- R8 M' {& |" q6 n5 q3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上
" G2 ~/ ^+ ^3 F+ d# a4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。7 s' v2 O# G5 c# r7 Z/ ]
5.大功告成。 2 x2 v* E: J6 D' J( O% Q/ ~
# R! e6 f S; N; k7 Q! g5 X k7 X+ a外一篇:MATLAB M文件变exe文件
! I' c5 X1 _; O8 K8 q/ x我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序# L8 _% ~+ R" p; d0 Y
希望这些对你有用; |6 E/ O. a. V3 j$ h) Y
" M2 V( K, K" D& p( Q8 E w! M& N/ c如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
* ]5 ^; V8 N5 U# S; ]# u" N
& G- L3 F* p" |! e9 @- v2 K9 q一、生成独立可执行的程序(exe文件)步骤: r: |9 }8 R: m+ t9 t
+ m+ X6 q" z0 f8 |6 E0 P
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
0 W% a( K$ b2 n" ~+ _2 ~- m- _5 e( w3 L2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。0 ]8 z% P: |; a4 @& I% ?
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。& Y3 i$ S3 l% M$ P8 l8 k0 ^
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
! w; c9 \: q: |! m* L; x( z! j9 V注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;8 x% c( Z6 [% [" L, ^5 Y7 q+ o; [
4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。$ q6 U" v# ~/ K! I% C" L1 P: P
) @" Q/ {( t. v- a) |2 }二、脱离matlab运行可执行程序
8 {6 N4 l: u# yMCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
+ {* c- _: ?: K4 k' `3 ` \toolbox\compiler\deploy\win32
6 Z8 F$ K: n7 N0 `, Q V/ R6 c" U4 [& z文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。& R k1 N* V3 {& D) {! s
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。$ Q, Z0 P0 ]/ g) q9 c5 u
在其它没有安装matlab的机器上运行exe文件前:$ E! X) Q: {" }! L+ z
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。& |1 Z/ f1 E t! l7 g: i
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。/ L/ b+ z6 z& A8 a3 z6 c4 B+ i
如果没有,也可手动安装,添加的方法是:2 y+ X+ Z. p. U4 t& v" n
右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
5 h' C3 T6 ]. [ P0 w注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
9 Z; a5 j5 Z( s5 a最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
( P( K' w6 U3 s: z9 I问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。. l, w; k- ?+ m# z; y
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:. p5 ^+ D$ ~6 z. r
2 p5 B# g' ]! ]
消除运行MATLAB生成的exe程序的dos黑屏的办法: G" J2 I& q, E2 \8 G* D6 h
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:7 U4 I6 H( h# F3 [
方法一: 在命令窗口输入:
, g! c6 X' S! A" j3 D( Ncd(prefdir)/ X* a8 e$ e, U- h% k3 H' n0 ]
edit compopts.bat3 U0 n# S; _4 l% k
在打开的文件最后添加以下语句:8 ~! }6 {5 R4 O6 ]2 Y% j
( _$ C# L' }- H; x& h
A.VC环境下:
4 U5 W K+ w0 } q, n" ^( P9 @# n
, U. d' }- `0 V" k3 _% i% Cset LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
) n& p, F% q& i- ]8 y% [# T( `0 Q$ @2 h5 X) l$ Z& D
B.LCC环境下:! D; o; b# f3 ^- A% o
set LINKFLAGS=%LINKFLAGS% -subsystemwindows
2 d1 t0 A. h% K8 P, r- U! d* p
1 s2 {5 R/ `; O1 o5 o) xC. Borland:# h4 k1 a) t/ \ j5 R$ F8 D
set LINKFLAGS=%LINKFLAGS% -aa8 U7 L: l7 @$ J0 d- o# t
7 o4 u8 x3 v' l+ C- U% {/ t
保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了* V1 J9 X! s5 s* k. i/ h
3 J) a# _' k# \
方法二:使用suppress工具:% M w! b6 I( ?1 u1 o- V2 j
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
/ F1 V3 }" b+ M& a
; B; F+ u) f# t" v) F5 S其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。7 Z. W( k4 v* q% _7 ^$ W
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
d/ c! [% J' P* H M |