matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:9 b+ d+ U" i- @0 `/ S
5 M# @+ a- O; r1 s: Y ]" I) t
1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。" j- b& X7 Z5 ]# k
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
- o _, M+ I8 F虽然生成的可执行程序可以脱离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.lib4 v9 s( `: Y$ r! m G' w( x
libmat.lib
7 j+ A' o) _# _- z1 i4 z0 T2 Rlibmex.lib4 f4 n* n( d: a# X5 g% Q+ X, m# [
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"。 3 h x1 w0 L7 T: N$ u' X
% _. }' C) b4 N( t, @) s+ ?" n! g8 o1.设置编译器:
! r$ I* U+ X7 B* }3 E6 w' j; k在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
/ ]4 [9 \* I4 W$ m; k. ^Mbuild –setup, 按提示选择matlab自带编译器LCC。- x- t3 }8 C3 D" k3 |& _% w! `
) l# b. o. L# v! D+ b- b1 O2.将脚本编译为可执行文件:
4 F ~6 u3 h# _$ Y+ p如项目文件包含:gui.m, gui.gif, fun1.m。
, g& x/ S) K/ K& s" {8 q3 N6 Z2 Z2 G# U5 ]& D& t: Y' L& }
在此路径下命令行输入: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: T6 T$ U& E% U& W2 I
! Y" ]1 I. E& D3 ?7 b
3.在未安装matlab的机器上运行可执行程序。2 }1 S# F0 ~& B/ Z+ ?% u4 x' u
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。
, P1 m, I; A) [将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。0 y% a* R0 e) l# N& B- L' @' ]& z- \: R
+ J1 }2 y' l; M" ~ i* D4.去除独立可执行程序运行时的“DOS黑窗口”。6 @1 t* O" W% [. }5 P
以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
1 Y Z* F3 Z4 G- p7 L2 i! w7 G: `
3 j" W; f0 V% y/ S. R" I$ Xmatlba命令行输入:3 }8 E; J% M" g0 `( w$ V4 ^
+ b1 u: |. t4 K; x
cd(prefdir)2 b$ j. I6 ^" w$ \" P
edit compopts.bat7 O. Z ?3 i/ }# H- P7 z9 \0 P
0 F/ X' I% Z( E+ h
此时compopts.bat打开,在文件最后添加:
0 \( Y f N* _( N6 [0 _
7 C4 Y/ P- Y. H- C9 \2 Q6 U% jset LINKFLAGS=%LINKFLAGS% -subsystem windows
, k* ]$ u# e( j: ?$ f1 l) v
/ V% ]4 t3 t. k9 n+ F$ m如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。6 V3 p: n2 U( m$ Y7 a
+ G7 o4 i" d2 o* A! e3 \
另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同+ a" d! S' x. m3 T7 d3 B
4 h# P/ D, Y4 S6 Z( P, T/ E5 rMicrosoft Visual C/C++:
+ Z: e, b0 z5 @+ r: L) B7 o
7 `( p7 K. w2 q8 tset LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
$ y5 X. u7 z: s+ z, ]% ~" |# r9 X) M+ A/ ^% W2 d M
Borland:* A* h2 f# D9 u; h5 ]$ L9 T
, H8 _4 u. T4 e* F' D2 q, ^set LINKFLAGS=%LINKFLAGS% -aa( X. p$ E* u# y( C; b, X
———————————————————————————————————————–9 R: _+ z- R- ]
) g w6 U9 j4 ?" E& T
方法一:6 y% e9 P6 N% L
已有gui.m文件和gui.fig文件3 z: ]/ t7 C1 K, \# X
1 在matlab的command窗口中输入# g# Q. r) J' `: K- R% v
mcc -B sgl GUI.m" y+ R3 f, N4 @
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
6 V- Q7 V: U# k) J- C/ E! N: X0 f5 U2 g3 S7 Z6 R
此时仍需matlab所必需的动态连接库。! @8 } E1 i1 W; F+ [' X9 f
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上' A6 l% q3 d/ e, b2 f
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,
# Z+ ]. h* z8 A5 o; h1 o其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共2 ?4 z8 x) e: I# p! f+ u
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。7 ?1 g6 ^( z% z
而toolbox目录则必须与应用程序同一目录。6 \* T7 q, Y; G, z8 S5 S
& G. F, Z9 J2 }& u; P: i2 }方法二:$ F1 G/ A: R3 c" X& k3 [, `
/ d: K# E" P5 K4 k- ^
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
& x/ [9 W& t( r' g1 y8 I, P8 l6 }2 C, X: x! C ?# p2 l
1. 转化为c/c++程序并编译为.exe
" z b( c8 ?9 ]2 @8 i& L先验证mcc是否可用,用matlab中的example验证即可
/ U- G8 X- r% ~! _$ g# f C建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
* C ^: r6 _$ A0 o! f! v( ~) O由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure7 h: E- T0 H! H- S
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等. u% I* L6 j# j4 F
程序发布需要.exe、bin\、.fig: f) s$ p+ R2 W8 b
/ s) D) t. h; M4 w7 |7 q, M h* _2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件
2 d2 z8 M0 ^, f6 O7 S t' L6 i前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径# V; y J* L( ]7 K7 X6 |) [# b2 m
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
6 K. X. N s% k+ t# C& ?6 \$ J+ |: G& E. m" s
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
( {" G: a+ s; G1 k- d以下通过注册表自动添加path路径
4 U8 Y) N l# B4 X7 t7 z%————————————————————————————–" Q) D* k" E* h9 s f
Screen.Next(); — 进入下一个屏幕: m# J9 Q0 g L* T. a
resultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
6 e7 n9 v& H d: n+ ~/ Uif (resultDialog == IDYES) then –加入安装路径
' o9 A, ~3 ?- ?0 cstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);3 ?& w8 f' ~, l2 ~7 ^
if strPath ~= “” then) t" f8 |3 \7 i' z
strPath = String.Concat(strPath, “;”);
6 I5 B, |7 r& {$ ?( F( h( ]. `3 `end
( z0 b- T: B6 h7 \7 c( q. T strPathToAdd = SessionVar.Expand(“%AppFolder%”);
6 W1 K1 _+ d# A1 ], w" _strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);& Z4 M9 q* K- i4 ]2 r' A7 k+ K9 W
— 如果路径中无该位置,则加入' p3 `' M3 E |
if String.Find(strPath,strPathToAdd) == -1 then, d! [9 |! Q$ d, m9 h! _
strPath = String.Concat(strPath, strPathToAdd);8 Q8 n( ]) k& {/ d
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);) _0 Q8 z% y( x' d
end
! h" I: h9 Y; c# s' L. I4 send) H4 r7 y" N5 F3 \4 z0 W4 z
%————————————————————————————–8 b- [1 S2 A8 l: S; w
方法三:: X, b, S) K' O) t) i, Y, o7 l
在网上搜了一个方法,还没有用过, 贴在这里仅供参考:$ g; _2 V) j9 H- c' N
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
/ o4 B3 j+ s, L( R& [5 f( x9 Q首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
/ ]0 C% b* t3 z1 m2 _/ ]$ x其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
( o7 p' ], j/ K* P: d& O第三,在MATLAB环境,执行命令 c% O o1 f7 x& C
mcc -m -B sgl file.m0 V0 {6 t# [7 t. g. c5 w
或者 mcc -p -B sglcpp file.m( b) I; @- m! X2 ?$ k/ ?' x
请键入help mcc看帮助。
; U X' X6 _" C; P9 I# @mcc是在“command windows” 用的吗?1 E% |. t6 R+ Q F; e6 {
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.
& d4 y: G+ a( y" ?4 x还有“添加环境变量path”是path到.exe文件的环境中是吧?
" p$ q2 b2 a7 f' P& K
. O& n& [9 g8 d7 j- ^* [1 p二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装3 i5 h1 Q a1 K" B
三、 如何将gui生成exe ?. }# G/ C9 F/ |
已有gui.m文件和gui.fig文件
9 W! S9 g( }! `. H; a7 m S1 在matlab的command窗口中输入! a5 i5 q+ W; x2 Q1 T' N
mcc -B sgl GUI.m
1 F+ l G6 A1 v. q# ]2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
6 S+ L6 C3 _& u! n- H/ C' F, n, ]+ z此时仍需matlab所必需的动态连接库。% _8 n$ B, J8 X$ D$ X) a
3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上2 M1 p9 @# a" R8 D9 {& m
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
) y- ?! s9 l- O" x3 W5.大功告成。
/ a; y+ f+ Y0 A* U8 u' d8 d, G: k
, F* W% Z* \( F0 u2 f& k0 r外一篇:MATLAB M文件变exe文件
$ I* J q4 i4 o' N我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序; \' p1 ]0 w5 W9 \8 W' a0 n
希望这些对你有用% l* Z. w' a- J8 C6 u" H; N
! @ g5 n; P5 P# U- Q4 i+ b
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:! p$ D; D Z2 ?
! s3 Q& M, x- u( u6 Y! [
一、生成独立可执行的程序(exe文件)步骤
5 b& i9 b g' [; j; T9 J
: ?. U: Z5 J( P0 O/ A7 H1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
F( T1 R/ {8 w, N+ d) Q$ P2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。" T" ]. o# Q( @8 |$ j$ X2 G% O5 C
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。/ [' c8 j `: V* \7 }4 v7 [5 v0 a
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
/ K, |( Y( M8 H% {+ k7 J# b1 U注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
2 _8 ?, {/ q3 W; J4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。" H; [0 y: f9 l' {
8 n# X; q) G# s& h
二、脱离matlab运行可执行程序 p; e6 S- f- d( T
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
) V5 {" B. a! a" U& p" c \toolbox\compiler\deploy\win325 @: X' Z/ ~, O. W; O0 K) A6 [1 n
文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。+ f4 s1 t* \/ K+ t4 l; T
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。3 m, x& F6 j K) z% i
在其它没有安装matlab的机器上运行exe文件前:
( ^2 e6 O1 S% t/ |9 q首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。8 F! @$ O% q$ `' F: D4 Q7 f* \- X
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。5 U3 _* V+ T8 ?6 D7 Y
如果没有,也可手动安装,添加的方法是:" s( \" Z# a2 G. U$ N! a' w
右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
. u% B6 N& [* [4 k9 n* p$ g9 |: m注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。1 o3 o6 m3 a# ]' s
最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
! g$ v8 ?. S4 O问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。
( X7 J: d) f$ x/ r美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
% e: J" n* ?$ K! {! O% q6 ~' s) Z) i( ~% M9 o
消除运行MATLAB生成的exe程序的dos黑屏的办法
' t% N( j$ {7 [; w基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:* Y) b% r! w, \/ [: d8 p- J; X* ?
方法一: 在命令窗口输入:* o7 z% X) o$ W
cd(prefdir)0 i& M) t; z6 K* F
edit compopts.bat3 E* @+ p$ J& e
在打开的文件最后添加以下语句:
8 E8 c! A" G Z
* Q" U3 f2 E3 FA.VC环境下:! E5 }6 s5 Z/ {) G) z: O% m) Z
9 W5 m) G' V3 s6 }5 v% b/ gset LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
5 ]) u5 c1 T& @! @5 G
) B3 r# }8 Q, j) F" c/ TB.LCC环境下:# B2 }. N, }; o
set LINKFLAGS=%LINKFLAGS% -subsystemwindows
: k) Z) W% A& A' j" e K' I! A$ I/ `9 y
C. Borland:- k6 z5 F4 s6 j
set LINKFLAGS=%LINKFLAGS% -aa
O* b& U+ g8 x, f1 q- F: j
3 E- O9 R, T. W保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
% a* F& f! E( S6 D: g- s6 J1 }5 L: e
方法二:使用suppress工具:
7 R5 L/ s A d8 \7 q6 |8 H下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。; x) o5 O' T9 u) l
$ s% `, @( E. u& x其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。5 \# a3 ?- H4 b" N' X0 O
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
/ Z; @& D/ U' M0 Q |