matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:6 V4 |+ k( x) P7 f" V- c4 X
- j4 \: c6 j5 w! N, H! l
1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
" u; C- p3 ], i9 M bMatlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。6 I. f- y& b3 @. c' E T- b
虽然生成的可执行程序可以脱离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
8 c5 d/ C H0 R, V* L, C4 X5 a3 Tlibmat.lib0 T5 U, l' i! x E
libmex.lib9 @ [8 @( R7 s0 d, c
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"。 7 F8 d# u/ h: v* f5 \# y
$ x/ f$ I& S% c* N( ~6 |! x1 L1.设置编译器:
' R0 ?$ S" b: k; n在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:* O8 p C6 u. l8 s/ Q$ N
Mbuild –setup, 按提示选择matlab自带编译器LCC。( `: R# P4 L! f4 Y' C) R
" X6 N- a% I, _1 F) F4 i/ m, E. u2 q7 S2.将脚本编译为可执行文件:( f# g+ R' q1 ? Q' m9 t1 J# o
如项目文件包含:gui.m, gui.gif, fun1.m。 v( p' U; O1 Z% c8 _
, Y8 S9 ]# s5 z& b
在此路径下命令行输入: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环境运行必需的文件。/ a* m8 c+ k, H4 I* i& G" N
8 }' N: {% n8 j7 ^; h
3.在未安装matlab的机器上运行可执行程序。& m4 S, i6 ^* J$ p$ g( k; l
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。% t' h0 [8 o; w/ T5 ~: o- ~9 i
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
9 V; {& M% Y" N3 V" J+ i; f% N. e6 ?
4.去除独立可执行程序运行时的“DOS黑窗口”。5 N* w" t. x: n X! k, x# X
以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
) m0 h5 o$ c8 r7 I: W9 f7 Z0 U% w5 c' d$ a, r
matlba命令行输入:
7 B, H- B" T6 e' K6 R4 N$ y# V$ f% ~& Z- d0 T9 u
cd(prefdir)
1 M, m V6 g V, }( [edit compopts.bat
% b3 E% E* H: |( w: {: J" Z& _- l( J; H# H4 ~
此时compopts.bat打开,在文件最后添加:
/ x* J, w5 m$ C7 E: J7 Z/ x4 c& J6 [8 n' u
set LINKFLAGS=%LINKFLAGS% -subsystem windows4 |' _( l- H5 o( p/ V
9 j' v* S( s/ m5 G' M- s' n1 Q
如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。
% r' D& R# k5 `; m2 a! J P: _; ]5 R [) _% P1 ]- E+ y
另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同7 e" r$ _, h. @, J9 V
2 ?6 F/ @$ G$ }& |- d
Microsoft Visual C/C++:
4 @4 O( }2 b/ P6 Z9 F
% [6 g3 h7 ?+ m& {( Vset LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup7 w' U5 h+ g7 H0 a
L A* z. K; V
Borland:
5 k% j0 y$ Q2 ^1 \/ f. y/ e* n6 f( Q. ?
- k! D+ ^+ g* l) |' m- N/ jset LINKFLAGS=%LINKFLAGS% -aa# R% |: z! y- C: A) P0 E& G5 i
———————————————————————————————————————–
! m& g" P+ m5 Y
& s' f! H6 O& _: J1 B方法一:) A% |# ^9 K- S. j/ r5 f8 j
已有gui.m文件和gui.fig文件
% U8 `! M2 l2 }" q1 在matlab的command窗口中输入
, D* ?3 L/ v" ^1 M9 C: G" lmcc -B sgl GUI.m
: m# r7 g. \5 C1 E _: w, t9 k2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
& A% a$ N7 q$ t+ }/ ?9 r$ E" k( C3 B
此时仍需matlab所必需的动态连接库。2 @1 |) }6 f* M" T4 v+ x4 D( p
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上& n/ U; M- `% Y0 n# C5 {! G# H5 [
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,/ _% `* B3 k, A8 h( a# D* z
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共
( m* p2 W/ |9 a, ? {5 q: `. j有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
0 ?6 w7 u. c" }3 n而toolbox目录则必须与应用程序同一目录。* [6 h" _9 i- y9 |
5 b) Z1 h& t! n4 F$ P方法二:' ~+ h9 O6 @! @! ~0 \7 J# b
3 h& p1 a: X! {( R" l/ Qmatlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。- T% c2 r* L6 x; m) ]9 `
$ f/ u8 N+ q( M7 s5 L7 u( h1. 转化为c/c++程序并编译为.exe; U* E+ M6 a" \: _7 R% ]$ m
先验证mcc是否可用,用matlab中的example验证即可
4 k- k6 }( y; l/ q$ Z1 M建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)0 [6 F/ w; P5 w K; D0 S
由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure7 W. S' O. [& X- C- w( |
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等- Y, Y7 [% A' O# k" M1 e
程序发布需要.exe、bin\、.fig8 H4 H4 J4 J8 Z- @! b3 G# b
3 {$ L% |) c" N2 W2 G
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件
" Q c* k6 _3 x% b y' P前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
* \ }! a, y* @& ~; {) j另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
0 f) i8 i- k' |
' J5 s! }! M8 ^, O( H9 X. T3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
) y. A+ t7 U% B& ?/ f! y以下通过注册表自动添加path路径
5 y& C% {8 t, ~) ]%————————————————————————————–
4 g: f$ D' W6 w8 m) c0 tScreen.Next(); — 进入下一个屏幕
2 ~) i4 b2 h; j+ g1 v0 aresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
! U& p! x/ I$ H( \# H& _if (resultDialog == IDYES) then –加入安装路径. x* F- ?+ t, e W
strPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);
# l0 I- m1 I# y9 ~, k) u if strPath ~= “” then: u3 ]$ s* K% \" b
strPath = String.Concat(strPath, “;”);
5 ]' r; Y7 U5 l6 U& B7 c7 P+ g; U8 Dend8 ^' R$ A; a: H$ V, K! G
strPathToAdd = SessionVar.Expand(“%AppFolder%”);
3 M6 p0 {# m0 QstrPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);
: K# V( o; N# m. C# |* o— 如果路径中无该位置,则加入9 G' o2 E& ~6 g1 |; A
if String.Find(strPath,strPathToAdd) == -1 then
' D- K, u" {$ f# w5 R1 W6 ` strPath = String.Concat(strPath, strPathToAdd);7 j2 r. S1 m8 \7 [5 E. j
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
9 g& W/ E+ W3 }; e end V% k" V- K# G$ K4 p+ D) O
end7 s' Z" J6 M/ c* `
%————————————————————————————–& G7 P- T: ~* Y8 D4 z
方法三:
1 \! h: H3 M/ V- Y( C: ^& q6 ` ~在网上搜了一个方法,还没有用过, 贴在这里仅供参考:
7 T$ N+ _2 Z% S( G: o1 m1 f! {一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
- {6 o2 w+ A+ y0 T+ m首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
3 m2 r3 q% ^7 x4 |, }" ?其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
, z( [7 s. ~3 ~& P' G第三,在MATLAB环境,执行命令
# m. X, p r dmcc -m -B sgl file.m
+ j7 ^( y' k" H1 n) r8 O或者 mcc -p -B sglcpp file.m
M I; {. Y$ `. J$ @3 }请键入help mcc看帮助。
- @. D" f* ~! n; ]mcc是在“command windows” 用的吗?! a/ l- J6 S, _. \% S
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.! Y* s6 ?6 [" { u9 M8 j
还有“添加环境变量path”是path到.exe文件的环境中是吧?
. ~, R0 d; y3 _8 E2 v# E! e, }+ l5 E+ \ J: A9 z
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装
. Z6 o9 F2 b" ~% O! V1 Z( k三、 如何将gui生成exe ?
3 J5 ~1 {- ]' C. m: f3 k+ Q已有gui.m文件和gui.fig文件
" s8 m! K4 `# G% \$ \; K1 在matlab的command窗口中输入% C( V9 {7 Y; o1 l/ N& }
mcc -B sgl GUI.m
! O* L$ h2 q# i2 i0 Z2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
5 S+ y7 w1 V, _4 v/ ^+ v1 N1 E此时仍需matlab所必需的动态连接库。
: i3 r3 ~/ a/ L" {; I3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上* r9 K+ ^" ]' d( t" [
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
9 b; P }2 e% |- K* g; { \5.大功告成。 7 b* ?/ A; G3 f- A/ Q
8 B6 @% a3 C1 g% S) G7 g外一篇:MATLAB M文件变exe文件
( Y w+ `, f8 |2 H2 J3 w$ M我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序
% R p" q- U5 x3 ^1 |+ k4 Y希望这些对你有用
! G4 x) C, r: i6 [4 U
+ }' [$ v+ t y( K如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
/ B( F M9 S, q8 ?0 s/ _2 i2 S: n9 c
一、生成独立可执行的程序(exe文件)步骤
2 \- t R v; E
7 x: {( C) c: |3 W! ^1 k" V1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
* J7 ~0 }; j- t2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。' s, [/ B/ Y. D' h. C% S4 m
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。3 [& }4 V X# l0 S4 n: K+ E
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
, n. S }3 G" y j5 n7 c4 F' H注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
! m- ^1 `# |2 H) \8 `4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
) U9 d2 k( w& A* Z; Z% n. @$ S' b1 K3 U* }% Y) g
二、脱离matlab运行可执行程序+ c) ^* e$ |) W
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
8 S" I0 |: W0 i7 c2 Q( X% c$ H) s \toolbox\compiler\deploy\win32
8 t* P7 v6 L) K8 L1 s3 J0 S2 ~文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
6 p: }( a" ?) o! ~7 \+ ]0 g在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。
; r! E( _" [ d( L在其它没有安装matlab的机器上运行exe文件前:
/ `9 ^+ U ]) M首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。1 X! x2 Y6 D |$ L% K, o" _# t$ Q
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。6 k4 m+ s9 p; t" l5 J/ W
如果没有,也可手动安装,添加的方法是:
: C7 C" i7 K$ O1 q; P右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。% @, `/ v: X% [- ?
注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。8 }. {4 m) d2 W
最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。8 {3 N( `1 A: ^2 U- Q0 x8 `
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。
^9 P+ O6 o: r8 t. i% r# u8 s$ N美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
}9 e5 Z) Y5 l u# h+ y& Q+ M/ b5 v6 n7 d
消除运行MATLAB生成的exe程序的dos黑屏的办法$ n6 T% I+ K/ v; ~* n
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:# E ~& K$ N( |6 P
方法一: 在命令窗口输入:
* t% M$ n9 f J) D6 e, F- R9 Dcd(prefdir)
3 ~* r9 I6 D$ ~' t5 Q6 |; ~5 P6 nedit compopts.bat* B4 @9 [) ^$ S) ^
在打开的文件最后添加以下语句:) v; h1 N3 R) w
, v m) o4 Y; q: p1 }; r
A.VC环境下:# c" c/ C; U, T0 v
) G. x1 S4 a8 t! I% g$ J
set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
* B9 d1 ^( ]* H" b7 Z+ Y! N$ J! B& b& |' i. X5 l# H
B.LCC环境下:& m _3 `8 A; A" _" a _
set LINKFLAGS=%LINKFLAGS% -subsystemwindows ) b6 A, W0 ]0 O- i- ^
0 f( J/ U* k; m
C. Borland:
! @& _# ~( g0 g+ l' x set LINKFLAGS=%LINKFLAGS% -aa
, t! k0 F9 ?( U$ J; h6 o. Q
. h4 a( |5 }/ f$ [5 d, q2 }: M保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
$ r' [; S }) }6 m
& ^+ L+ Y2 O; _# Z6 O方法二:使用suppress工具:& I1 D- I9 K! h7 y0 Y
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。( V4 o2 a( z, O3 m% i
0 Z3 s7 T, ]6 f9 i5 {其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。, _& Y6 u. q2 n# |1 k
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。5 D/ q& ~+ O' r
|