matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:% ^- D% c% t2 \. Q/ v! e
* z; |6 i$ P: G8 p/ L1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。$ V! z4 c% G: q. ~1 a+ s6 e
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
0 d& Z- s O; c9 D. C5 D7 y' p0 x4 N虽然生成的可执行程序可以脱离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+ t) U- n8 H$ ^, F! [% R' J
libmat.lib# N/ _! L8 U( P! ^ I
libmex.lib, j9 i' \' `/ F7 q
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"。 , u8 @% z( ]- B' D. t
9 J% R7 ]9 K: r3 D8 R6 [
1.设置编译器:- l% O6 {& @" \- S8 h3 j1 h4 C
在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:6 I L3 h Z: e9 \" O$ ?9 }
Mbuild –setup, 按提示选择matlab自带编译器LCC。
- ~5 y9 K* v- _5 a) o7 ?3 x
; O3 D. `* F/ {2.将脚本编译为可执行文件:
, g+ e2 E* r+ q E5 U9 T# y. ]如项目文件包含:gui.m, gui.gif, fun1.m。1 S) v* x$ M8 u0 L- ~. c1 w
& K) C( l9 }+ \7 N" c! |在此路径下命令行输入: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环境运行必需的文件。- k# k8 n8 l& B6 F3 [! w, a" z
/ h. _" h2 z5 H8 c/ T6 E5 h
3.在未安装matlab的机器上运行可执行程序。
- t# ~. F# G% `' u( }将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。! J C* t. g# o% c3 U
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
' d. Z3 r% {) l7 B3 _6 d: e; r7 @7 X8 a4 v0 ]; v
4.去除独立可执行程序运行时的“DOS黑窗口”。
2 N6 r1 p1 y" a* [9 ]- K& @以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。2 i9 W( t& K5 `" Q
( ?* T0 h! x/ }* nmatlba命令行输入:$ g1 ~' Z2 r- V! W: {: H# |( R
% L2 Q# y/ I. K! {4 ]
cd(prefdir)
% S, x* ^, b* I5 w, Nedit compopts.bat4 q( |4 p9 @+ m# e% P+ x/ g
5 ~+ x* ^: g7 `6 V5 W0 |
此时compopts.bat打开,在文件最后添加:
" R# }( u+ q- S1 B/ d( E0 Q, | ^( \6 X
set LINKFLAGS=%LINKFLAGS% -subsystem windows
! F. \0 E! V: l. }, y8 O5 r$ [7 J- l
j2 S2 P2 }6 r9 A, [如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。
# S$ b7 v. f" \7 d- w. Z0 C: [$ k* Y, K7 `: |1 g
另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
8 w. E i4 J, ?' Z# q3 z+ ?, @ b$ q- d
Microsoft Visual C/C++:
) k$ |: n l2 J& @3 g- ?# u, ?4 O& \( r1 l9 s3 a5 F
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
* E; g1 k% f! c+ A3 L) j, s3 S- Y. D+ S( Y
Borland:* z% f2 L( g |# F( a1 X! y
8 `/ b- v7 ^4 e: @, H0 t8 o9 d6 kset LINKFLAGS=%LINKFLAGS% -aa
! M+ G$ _$ r9 `3 |8 G———————————————————————————————————————–% [) A' \- Q K
9 d2 a$ Q# P- {3 k' r& K方法一:4 [4 C4 C. ?: ~" b; d
已有gui.m文件和gui.fig文件
6 I( _6 W; U) {1 在matlab的command窗口中输入
- F' ~8 H( E" Y# V1 _3 }* L% Xmcc -B sgl GUI.m
# x: o, _5 p7 y& Q* }8 l( h2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
! O! A8 v9 b4 u4 W* F @; A
/ u' `6 [. }5 r; V1 D9 U* W此时仍需matlab所必需的动态连接库。
# x9 }) n7 A% \) p+ |3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上" x+ z5 k8 p9 f, v
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,5 V1 ?3 O# X# P# N! ~4 I! j$ k
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共( J5 k8 V5 G- s
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。, Z' _+ H/ c2 q- }# e6 O5 T
而toolbox目录则必须与应用程序同一目录。& ~) X; p2 v b6 J. t, g
. p/ i2 Y( j* f- { I) Q
方法二:. @4 D3 b* m2 n+ \' b0 i
: e# K5 o/ y' D* p/ L. P4 I
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
* [2 r* i; B# ~2 O6 R6 k0 [) `# V& U4 T; K) r
1. 转化为c/c++程序并编译为.exe
. B1 R% b! ?# J% m& z9 S先验证mcc是否可用,用matlab中的example验证即可! r5 a+ L. R, K% I; X/ N
建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
8 `2 @2 ]- c% D& N由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure! T1 U) |/ a2 D+ d3 G
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等
2 M8 _$ l: G$ ~1 }; C程序发布需要.exe、bin\、.fig
: m5 j0 {/ M" |5 f
; _: O$ e. G/ m# n0 X2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件
' {$ f3 m. p. X1 @# h7 B: e8 F前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径: S3 V0 o: i( t+ b4 l
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
6 T. K. h; G6 o* d3 _4 |* Z% J z, m1 q8 e- m' f. C$ D
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
9 K( h5 A3 R, U, H0 J以下通过注册表自动添加path路径
9 X8 Q: B) o$ U; y/ t3 N: c%————————————————————————————–
7 L! [3 Y k9 J# q8 S6 [9 t0 YScreen.Next(); — 进入下一个屏幕$ L4 U0 \' A# [, M. |6 h
resultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
$ e! a! s$ q6 _# h$ Fif (resultDialog == IDYES) then –加入安装路径
8 n' @7 f3 H0 A' t: g( C5 gstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);
4 u! }2 y, `( f if strPath ~= “” then4 A8 n: V! I- I$ E5 _. N
strPath = String.Concat(strPath, “;”);
g6 e* C/ o p+ i" Mend# m4 \7 E3 E2 n7 H( F. Z
strPathToAdd = SessionVar.Expand(“%AppFolder%”);' p% [7 b2 G3 d: N: f( L
strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);, J% C4 u& ?! ~5 e* {" o
— 如果路径中无该位置,则加入
; q E) c$ C" b4 |9 v# Jif String.Find(strPath,strPathToAdd) == -1 then, O, U, k% M: |2 z6 S
strPath = String.Concat(strPath, strPathToAdd);
5 W% o& _* d" i5 x Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
* I% H/ Q: ?# |+ j/ _) _4 l, I$ q end
) |/ B" V3 S; D5 m" _, ?end3 [- r% d: n+ W
%————————————————————————————–
6 L# Z4 e4 c7 E4 ?7 l! D方法三:
* }3 e$ N" z0 L$ T+ e在网上搜了一个方法,还没有用过, 贴在这里仅供参考:
/ ]+ z" S. y' W7 K$ D, {一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---# {/ k$ p$ n: i/ g
首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
0 N4 k# m" K: P: S p- L# ` N* Q4 v其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件( A8 h; N# q5 R4 f
第三,在MATLAB环境,执行命令- U5 l' J8 I" e# W9 {% e
mcc -m -B sgl file.m
. P/ [. n7 o" B) ^. c9 z3 R或者 mcc -p -B sglcpp file.m- a( @% j* d# q- z A4 E" X3 u( `
请键入help mcc看帮助。- T- S7 A3 v i9 t
mcc是在“command windows” 用的吗?, T9 y/ k1 C; H
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗." G* ~$ T" M1 [7 F z: d
还有“添加环境变量path”是path到.exe文件的环境中是吧?
# D' ~" x+ Q6 N7 o9 |' P1 C4 Y# u q
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装" i9 L# w- Y+ a9 |
三、 如何将gui生成exe ?
/ j3 r5 U3 r1 ?8 u- {已有gui.m文件和gui.fig文件7 |0 E& f9 B n6 x9 T7 ^
1 在matlab的command窗口中输入( B% O" E0 H% x& V7 z
mcc -B sgl GUI.m2 v2 J: n5 {4 _; G
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器 T9 D$ X& \) g, q' s1 a2 `7 I
此时仍需matlab所必需的动态连接库。
7 s2 b- ~3 n0 |* b5 w4 j0 W! Z# Q3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上: E1 U/ A6 b/ i8 G8 d
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。) e1 h* N. [! P0 L! y
5.大功告成。
; n1 Y9 y9 y3 V/ `" c9 ]+ Z; G7 s5 v0 ?) v d9 s3 Q. h4 m; p3 e
外一篇:MATLAB M文件变exe文件
5 P. G8 G4 p1 ]5 M" j我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序; r7 M% P/ @: f
希望这些对你有用
* Y9 h$ k. h: Z
2 n2 I4 }/ @1 N如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
5 T) \) V* B/ v+ Y r* ]/ G
& f( h5 G% v: _' ^7 g/ U m一、生成独立可执行的程序(exe文件)步骤
4 S) d2 F6 B, A! @! W
, R/ R% k0 d. o) Q4 M- O3 R5 A) a! x1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
1 ]5 T$ K) L$ `8 ~2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。% e) h7 ^% v) w
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。 [1 b7 l0 A W' _" w* d k
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
: {4 V1 ]% B- u# P J' T8 c注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;2 a$ x8 L. x/ T1 s; m* d& q; E) t
4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。5 u9 z" D8 C+ `' }7 t* [. Q
* z: c. u) \" q1 T2 H; a$ V
二、脱离matlab运行可执行程序
6 d0 Y# O9 h: t; g1 YMCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:" ^2 m* c6 d# n% C C
\toolbox\compiler\deploy\win32: N' S' H3 y* H0 C" C
文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
: [1 D: X" K. o# t/ m- n/ x在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。. ?& C# ^6 m1 y1 q+ m. k
在其它没有安装matlab的机器上运行exe文件前:
" Z$ @! X6 Y: W, G/ x1 U" p9 L3 ~首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
* g5 J& b7 y" X其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。/ r7 C1 H9 `: {# Y; M! W$ U# Z; ~" I
如果没有,也可手动安装,添加的方法是:
8 j$ J) N" u4 q# B右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。6 `0 O! c% W) z5 c
注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
1 k$ C3 k( Q1 u/ _6 R, `) g最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。7 S% G( u M+ ?( i. [( G
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。( u$ e t; \9 O t* w1 Q
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:1 A% y+ A a! h& U: ?" ~# F
6 m, s3 |: F$ r( M) b! g6 ?/ k* x消除运行MATLAB生成的exe程序的dos黑屏的办法6 n# z( l8 ?4 Y+ q
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:
7 ]. A+ Q2 m8 E) [方法一: 在命令窗口输入:/ O, Y( s2 |; o. f( h( {
cd(prefdir)' ~- E9 K f6 u1 u9 d$ A v
edit compopts.bat. b" ^; B( _% \+ N# {4 L4 y, k
在打开的文件最后添加以下语句:% M; v; H! \! }# i7 A
% I; W$ z/ x( H! g5 p2 E g" O4 o
A.VC环境下:- n: H5 U* d' {/ q( l6 ^
; A0 n6 a* z+ \, Q* R' S( o7 ]' e. Dset LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
& `# O4 \* R& K) J7 P
8 K, t! E6 W4 H( RB.LCC环境下:' O9 [$ ~4 a" _4 F; \- h* u4 w
set LINKFLAGS=%LINKFLAGS% -subsystemwindows 4 b; v9 ^2 o/ {2 N0 N; I' j
5 ]$ }9 h! i: ?+ O5 {- X. h$ e1 Z
C. Borland:
, l& J: K. U9 B3 y! R# V0 D- k set LINKFLAGS=%LINKFLAGS% -aa
$ Z3 A) `, K1 n' _
1 |: |7 M' b F# p# w# d! C$ ^保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
' b3 S( s1 G% V0 u
, Y( K% d( `9 }- s$ T! f方法二:使用suppress工具:" I+ w" ?8 E) ]5 c# f, `" W) W
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。$ r9 b; k1 j$ m% T0 Q3 D
' D2 b( v1 y+ M. y/ P) O* s其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。5 @+ J% | p s# M
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
" Z/ G8 y$ I& O5 G |