matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:
4 S6 ~5 w0 P" {, S0 E' a9 c) C7 q' a* Y+ b: G( P+ }# F, I
1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。+ h: `6 p7 s' e( p, Y% N
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。- x7 a. E' Q- t% e5 ^: t* s& u
虽然生成的可执行程序可以脱离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
1 u$ A U9 C7 O/ glibmat.lib% x& j0 ^2 L. [
libmex.lib
) p8 p/ o0 m: G& @7 v* b Glibmx.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"。
# A4 W$ H( q6 n E# {% {; j " s6 U; v7 ]+ k. S
1.设置编译器:6 h' r" h- q& \" v; P; @
在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
3 o1 R, E4 t2 s2 o& fMbuild –setup, 按提示选择matlab自带编译器LCC。
- a4 j. }3 N5 w) o. ^1 t U* q4 ] W0 N6 L$ {1 h8 k0 K) y
2.将脚本编译为可执行文件:1 [& T" [+ j: k( j& l `* L& E
如项目文件包含:gui.m, gui.gif, fun1.m。$ Q) u( l9 @% E& f
2 h+ M: U4 ^# ]* f4 X+ e* F' s' 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环境运行必需的文件。& d$ h& {4 S1 o7 X
( y5 I3 r& t6 K4 a Z
3.在未安装matlab的机器上运行可执行程序。( G1 g0 t. C! L/ j
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。
|) Q, v" l: J9 S- y1 ~4 ]将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
/ @2 M# i3 g& I! h0 l/ L' j8 @& L& X }
4.去除独立可执行程序运行时的“DOS黑窗口”。. R, _1 t# I( c
以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。) J8 P- k" D; H! e3 o
8 N5 G) w) m0 S3 h8 Smatlba命令行输入:2 B! b. X$ P/ B8 s/ r- d: |( j; K
$ w7 z/ x4 t! i' M* Q1 z3 z8 j
cd(prefdir)
$ `% k8 v/ g7 V$ U' l8 qedit compopts.bat
/ ~# c5 z; {) d. F6 M5 {% R" h) u: p! V) M! o" h4 e. D4 H0 Z
此时compopts.bat打开,在文件最后添加:
) c" |: o9 k! C" `4 R, a
9 ]' H. H6 b+ I5 O4 E2 f1 {5 w5 fset LINKFLAGS=%LINKFLAGS% -subsystem windows
$ D9 Z% q! |/ Z; T
5 v: P3 N# U* g9 ^& w+ a( A8 ^如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。
; X* x2 S" R$ L6 q1 E, b! b
* b5 o& j0 k+ K另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
p1 i& Y% Q9 Z, ^
+ c3 F& o* E8 S9 O% c/ o! NMicrosoft Visual C/C++:
0 ^0 H7 L# _7 K: C( h+ X) e; b2 E! q) q' l: Q
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
6 z$ [, Q( D4 o3 f: b) R% Q- S% _2 t. e& Z
Borland:
3 \! W& u8 a8 S8 [; y# ]$ N% f7 a* o
& F! j2 }3 [! K3 fset LINKFLAGS=%LINKFLAGS% -aa7 E4 J: P6 O0 V
———————————————————————————————————————–
; b W) {& C, d9 m: n; P" L6 u5 r4 K! C% k6 l+ j" M
方法一:0 Y0 Q r' `4 D$ `$ A& `
已有gui.m文件和gui.fig文件& k) m$ r2 s* U. q! U
1 在matlab的command窗口中输入; ]6 S" e$ C" C5 a, Z9 g
mcc -B sgl GUI.m
& V! d1 @+ M4 Z: s) e2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器6 i8 n/ X. C5 ?; k4 l6 y4 q" K0 _
& _, `2 I2 k$ I) \- g9 H8 M8 S$ S
此时仍需matlab所必需的动态连接库。
, S9 O. w* ?+ ?8 F3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
$ M( \. O5 @. j3 C/ O. ^% r. |4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,% |9 s1 R% h9 i' H# s* w& j* o
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共
5 ~! N$ N- X6 t; v1 u. S" V& j有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
; G9 }+ g1 {& x% M! F5 C- R而toolbox目录则必须与应用程序同一目录。. ?8 Q# Z* |1 }6 I8 O# X; [' m
6 y1 K7 Q# I# y( l6 q2 Q$ g
方法二:
$ D- Z3 N/ R/ r4 _: M! T
' p7 t* J" l) t* t8 k% B! J0 H7 nmatlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
8 r, R2 H3 K5 ]; ?+ L6 @" c7 l$ P- Q7 X8 n) R9 f* K
1. 转化为c/c++程序并编译为.exe1 ?5 e, j% V& X W( D
先验证mcc是否可用,用matlab中的example验证即可
C1 {( K. i% M% Y3 q建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
8 b; T, {, [! n; J$ Y5 ^. @由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
! I9 t- V. e! R: X5 y$ a编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等0 j2 }- N' D1 G2 j9 d9 a" H
程序发布需要.exe、bin\、.fig- i8 _2 @6 c" e& W- F0 B
1 {. O+ L0 ], ]4 R
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件7 ~0 U8 d2 L3 t
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
- [. z; s* m6 R另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
; o/ `* ]$ D# p1 A n" b' {2 @1 P9 {, S: Y% \
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
# O2 x' [4 I" H0 ~# _以下通过注册表自动添加path路径8 ~, z* g w" G! j" s) V1 n7 t
%————————————————————————————–
2 _! x& b8 k6 o8 WScreen.Next(); — 进入下一个屏幕
0 [( z* J8 D: _( N0 F5 d4 HresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);" Q( c! B$ ^# v+ ?/ ~
if (resultDialog == IDYES) then –加入安装路径
, \, n1 m2 \, x& q7 x( B6 _+ FstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);. o7 W6 j, l9 ^/ \
if strPath ~= “” then6 ?# B6 L% t9 D9 k
strPath = String.Concat(strPath, “;”);3 I0 w' }, V- k6 ^( } P9 G6 Y$ [
end6 i( d' B, F9 @
strPathToAdd = SessionVar.Expand(“%AppFolder%”);( y; k7 y! Q' o P
strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);
# M5 W' V, w' {2 l5 p) B— 如果路径中无该位置,则加入
( i& j: G5 T& [ Z: x9 X' H1 Z1 j( zif String.Find(strPath,strPathToAdd) == -1 then4 `! {! o, O0 A! H
strPath = String.Concat(strPath, strPathToAdd);# R7 h3 d$ |8 Q# M& ]- P
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
, j& V& Z7 N' z8 Z4 W8 H' B7 p- z end# d6 m7 H: V1 w8 o# o C' B* E
end
9 E/ E4 z! l2 ?%————————————————————————————–
' P1 W7 F& o" n% A+ M8 `# N方法三:
% {1 t! W; T! V" H( a在网上搜了一个方法,还没有用过, 贴在这里仅供参考:
^. z' }' `* \一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
" J! A& g h7 G首先,使用mcc编译得到.exe文件,具体参数见帮助文件;9 D: ]" {6 i6 ]( f& r4 D
其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件) W; r6 j/ m& M2 _& [1 x5 {
第三,在MATLAB环境,执行命令; `" d% e8 g/ m! S
mcc -m -B sgl file.m; Y. Y6 a g7 _/ ]5 ~- q2 M; T% e
或者 mcc -p -B sglcpp file.m: E4 G5 A$ o7 e y! p0 o$ l
请键入help mcc看帮助。
% w4 E8 ^# ]1 j" h5 f, _mcc是在“command windows” 用的吗?: \, |# O" r7 o% `; s
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.6 l" _) u- u* D' y* C
还有“添加环境变量path”是path到.exe文件的环境中是吧?
% m. v% x% {& _$ v2 d
1 X( a$ ], g B, q( o二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装
2 _' M( D! \% R, r2 c9 b0 Y( }: M三、 如何将gui生成exe ?
5 o" K8 h: S5 [9 y5 P已有gui.m文件和gui.fig文件/ a+ H7 V; h) `: s' [8 L- L* q5 t d
1 在matlab的command窗口中输入: N- _2 p% t: `# j' m) r; c. K
mcc -B sgl GUI.m) |7 J( N8 H6 b) s: f7 [
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
, c5 @, e# z: k& f8 y4 z7 |此时仍需matlab所必需的动态连接库。2 j9 Q' ?: _+ L
3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上3 c; i4 @) m+ d1 b2 i0 H$ C4 l9 x9 J" U
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
7 i9 K) w( ^- b3 t" Q* ~- B: G5.大功告成。 & B8 b, N+ H9 j7 }3 v
3 H. P! I* q( @4 H外一篇:MATLAB M文件变exe文件
( p8 H, x) q! s$ t |4 S我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序; ^6 Q5 u, ]4 U* v
希望这些对你有用
4 x9 B7 |- e, b. m4 Y" o: {
% U' ?5 B5 l' K如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:! N' e' p6 B' _) ?/ `- e
1 Z5 f7 l4 `/ n' `+ M: D
一、生成独立可执行的程序(exe文件)步骤
, M5 B& k9 Y; m" p& S* K
2 |( a! L" P I8 |1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
1 ^( v; m' Y3 j. G2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
6 f$ x2 e j0 [% g3 @3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
5 @2 G" v8 R+ Z5 j3 w' u当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
$ j: w) s5 l: N5 g( k$ B注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;! ?* W, f7 r$ A' q2 I
4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
2 \1 N7 {/ o; }) G, ]
1 n2 m- k% S* ~9 s n+ |/ ]二、脱离matlab运行可执行程序' D( e0 M# T: x- j& y, ]
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:+ r! x |+ J7 K; ^% U: L
\toolbox\compiler\deploy\win32( U3 v- t# j) h/ i# a I% l" O
文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。& N/ K$ j/ C, `2 N' @
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。* Q: S0 T* S* k+ F) D# Z$ K4 A; Z
在其它没有安装matlab的机器上运行exe文件前:
& c5 @( ^$ d5 C0 O+ k) {首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。, E( V! T! E& f4 t2 P
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。3 B u7 M4 `3 c
如果没有,也可手动安装,添加的方法是:/ C" ?& _. l& U- W! l8 `
右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
) h) [/ a) Z3 t6 _/ s2 o) X注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。' ]6 ^, r1 y: e" k& } y/ e( A% D
最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。( m+ C0 w6 H" Q4 u: l/ Y8 |* ^
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。, U9 [' n$ c! D6 ^, v* ]; g* U
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
1 f, u7 j% V* B) |3 V$ a4 S* H2 f; d0 }) g `$ K: o
消除运行MATLAB生成的exe程序的dos黑屏的办法
# I5 S, z5 h7 A基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:- C- p; q+ a, N8 q
方法一: 在命令窗口输入:: M: {; o1 G- x: T0 P
cd(prefdir)
, r F; Y( s6 Z: aedit compopts.bat
* l' e& h$ K: ?- G! H; k3 Y在打开的文件最后添加以下语句:: f5 {& g& h8 q6 {1 F4 V b
: @; W: G c0 m. OA.VC环境下:
- {9 p. }, t" G. I: U5 V6 Q M9 Z0 Y9 p
set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
: \3 R+ i7 T% \0 \4 M8 M: X) Y
( b0 G' }5 `9 O* I5 xB.LCC环境下:- \) T* }7 B3 [' `- b; _
set LINKFLAGS=%LINKFLAGS% -subsystemwindows l4 u$ G* N/ I9 h. W. k) P5 ?8 O
# M+ ~* _$ k( X! m: y8 rC. Borland:
/ G; R' a1 Y% ?9 O3 \ set LINKFLAGS=%LINKFLAGS% -aa- q. W* f0 o; }& I+ r+ q) `
+ G5 i3 P) |* k; S* d
保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
; B+ Q% a$ i t; }5 b. y5 `0 Y3 L) y& _; i; o
方法二:使用suppress工具:
/ M& G/ C+ c& T下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
' M# W8 s/ k. c2 O% V' G
) ~+ Z* `( e0 M) l6 ?其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。- L+ k4 g- c0 R* W, J* a
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
6 h* |5 F' M+ y2 A0 E: R, { |