matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:
3 G! b: w- |9 X2 q! R8 B" Q+ A. N1 q
1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
$ s# ]# ]: l; r9 P" C [, gMatlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
, j% h& z- X) R s2 w: e4 X虽然生成的可执行程序可以脱离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 O% b* y( L0 Q: \# E
libmat.lib
! z- e4 Z) ]0 n. T* Plibmex.lib
3 ~ I# N9 j2 Q& F6 elibmx.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"。
* U0 p( W0 g( i3 N1 u, K
* f" H- y# u/ c5 a1.设置编译器:; j( C3 i: v- z! y9 |
在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
3 T+ q" v0 s2 u, J7 F( F6 ~Mbuild –setup, 按提示选择matlab自带编译器LCC。
" p* w. F, S' A8 t0 S0 \( v" d
+ C$ y p, s- I% `6 f% d& T; i2.将脚本编译为可执行文件:
8 m3 J% b& v9 o' U" ^如项目文件包含:gui.m, gui.gif, fun1.m。
; z! a( t# \6 i' A2 i. h2 P/ _# s ~7 L6 f# ^, f% d
在此路径下命令行输入: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环境运行必需的文件。
/ [/ f# O7 t! S) C9 d; W( E* v1 o6 I( e0 J
3.在未安装matlab的机器上运行可执行程序。% Q- ^ D3 ^! E
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。+ A) F7 g+ O2 X
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。8 I# O7 t! G% z/ h% Z# G i5 N0 ?
* ~1 }: p" q* I4 G* c4 n. j
4.去除独立可执行程序运行时的“DOS黑窗口”。) r7 g( O; W! C1 h, ~
以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。* e" s4 O. C& J U! h
$ z4 M" H5 D! V5 mmatlba命令行输入:/ O8 A% |& o7 M( b- z
. @2 g2 j& X) z' acd(prefdir)6 E+ J G6 w, i
edit compopts.bat
( u# }1 s! i0 N1 A6 ]% t! Y& M6 l) T% Q P
此时compopts.bat打开,在文件最后添加:8 z+ y0 Z; g0 o. V4 b0 R. F
9 q# g7 g! v1 O, y& ]; }
set LINKFLAGS=%LINKFLAGS% -subsystem windows3 ]2 j/ ` ]. F
j: M5 n6 y. b0 S' O8 ?' I如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。0 V! g" q% [& K& N5 a, {
4 N# y4 |) \& x# C- @
另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同# J' H3 l' P, E+ s
! |1 }3 C7 Y5 h/ R }( i& P
Microsoft Visual C/C++:
3 _; y# N5 W& w/ Q6 _& I8 C, V( }7 k; f/ U- l8 b# ~6 ?5 u1 O3 ~
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup T$ n6 N) P: G! B8 y5 ~
1 R' G+ E% }3 R4 r2 u
Borland:
* `* V* C. c6 _: L& c/ {; G8 I
/ b3 }* j+ H2 ^ @& ?8 `* k. }set LINKFLAGS=%LINKFLAGS% -aa4 w$ U9 U' c- p! W, U
———————————————————————————————————————–
! M+ W5 C8 }' E# [% c4 E+ Q' C
( A/ Q; {1 _5 e u5 x, w方法一:7 H% S6 i" G) {& t
已有gui.m文件和gui.fig文件
6 @) V; g7 N& H1 w1 在matlab的command窗口中输入
. ]6 I3 d& X/ q* qmcc -B sgl GUI.m! h& J+ F' A4 l# \- ]
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
- n7 k* U& R G: @ j; C& W9 X( w, X7 a9 g% v: t
此时仍需matlab所必需的动态连接库。
" L2 Z# {. w% o3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
% Q) O7 h$ _4 a9 e g5 x V8 N4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,5 n5 D4 K e# w
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共
3 L. G0 A; z( j+ K! L( d$ Q. l有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
: F$ U9 x f: V: l& B, {+ \# P8 y, P而toolbox目录则必须与应用程序同一目录。
5 @5 A5 k( K' Y8 j7 G& g& w* D( x
# c; V- ` d! f1 U% {- F! F1 B+ e方法二:/ c- y# j( ?' J) G- h* B
1 C8 Y1 ~0 t2 {7 F
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。3 S: a, h% s1 n s) _: m
; m1 m V# |( f: D# G/ \7 f
1. 转化为c/c++程序并编译为.exe5 B+ ], p) r% q
先验证mcc是否可用,用matlab中的example验证即可
T+ ]8 C1 n8 r$ w+ S建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)$ y9 }% k. f# B2 Y* N
由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure. I& {5 j1 Z/ ^4 P% q
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等
. h6 A3 Z. X. R& ? O程序发布需要.exe、bin\、.fig
. x6 w7 S8 m4 B. W5 g0 o) [$ {& {9 r" e+ g8 g! `+ e5 O
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件1 g" J" p8 M( o& q& ~: x/ d
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径# x) ~* E6 o: E5 G a8 S
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
8 g$ Y5 p" h: K6 R% P
7 p8 h z3 {3 [: V) @: u3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
9 `, o2 ~9 h- T! J. Y7 D4 |( z( u以下通过注册表自动添加path路径
$ u6 J& K! m. I+ O9 J# H%————————————————————————————–4 G, |* u; b# r+ g A
Screen.Next(); — 进入下一个屏幕
1 G$ G% v, p9 p# L( H3 p" JresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);, u4 A) f: {8 N. E, g& K0 ?* I
if (resultDialog == IDYES) then –加入安装路径
9 r3 k$ Y' n: d) \" O K2 [/ NstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);
% ~+ Y2 U3 W$ K$ g: F if strPath ~= “” then7 k, c( ?$ `- Y7 i! ]0 y/ O1 ~1 K8 T' e
strPath = String.Concat(strPath, “;”);% L5 H, S( r4 o' ~5 k8 Z" {
end
1 Q3 @9 f1 B4 E# F* I strPathToAdd = SessionVar.Expand(“%AppFolder%”);% Q- [8 G& {0 E$ |# a0 l9 f
strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);5 U# _3 ^; A* U d7 b3 m
— 如果路径中无该位置,则加入
9 T, g7 x$ g( E1 k. i2 hif String.Find(strPath,strPathToAdd) == -1 then
( N4 m# O9 D' @2 d$ e3 A* @2 g$ v strPath = String.Concat(strPath, strPathToAdd);
4 T7 h0 W) k6 K7 O" h: d Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);4 q F9 N# d/ M; u8 _* v
end, Z! q' [5 c( _
end6 x7 Q, o' H# C$ i/ ~
%————————————————————————————–
) [* v0 | |, x( L方法三:+ Y. f( ]3 ^8 Y
在网上搜了一个方法,还没有用过, 贴在这里仅供参考:9 a4 A6 ]) [' j2 K
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---1 I7 g; P1 K7 p: ?$ f
首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
4 d7 U* k q1 w/ F m4 X' m$ z其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件) J8 e- z$ s' \
第三,在MATLAB环境,执行命令
: S1 T+ B1 k0 K1 x/ T" zmcc -m -B sgl file.m$ d% \, J; D" f4 ^* ~$ k9 n- f
或者 mcc -p -B sglcpp file.m. H5 Y% Y! v5 e% A
请键入help mcc看帮助。
6 J! l) w; [* K# }mcc是在“command windows” 用的吗?1 c2 c+ o& q( v A) o, e- d$ G3 [* C
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗." o# M: b0 c! o- S, x. i
还有“添加环境变量path”是path到.exe文件的环境中是吧?& n) \7 s7 w1 s( y& `3 a2 {
: W4 K/ d& [4 q- B9 s: g2 Z二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装
9 |2 V! B) O/ I$ i: A, M三、 如何将gui生成exe ?: k5 |5 ?! x3 \, w
已有gui.m文件和gui.fig文件! }! g) ], X$ B/ S$ S3 m
1 在matlab的command窗口中输入
: s) |* J, ~% ]( H8 Q! gmcc -B sgl GUI.m3 s& {$ c4 R5 s9 Z6 `
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器1 T6 N) o+ d' c/ m2 J9 a0 Z
此时仍需matlab所必需的动态连接库。+ u- h. K% s2 I! V2 Q* c! g1 t
3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上
% }8 {" U9 e- p, z$ b4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
( Y" N: B3 D2 p4 R3 F5.大功告成。
; j: t- e. }# ]1 S: n; Q
' Y4 g' q" V" x4 j/ j7 W外一篇:MATLAB M文件变exe文件
6 V$ c9 o/ U$ Y) g. f3 ~+ r2 `& F我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序
) ~* ~+ ~: w1 @- V) i希望这些对你有用% E* v p b) C: j5 G
/ P- n6 p2 f' @; }. g
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:' u- D' u) u( I& F
* ~# x$ V$ S3 ]! N一、生成独立可执行的程序(exe文件)步骤. F& ^' k+ {# a$ q+ u+ u; ?
9 h- y0 N( Z+ C2 Q. r
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
+ y- }- K+ _3 Q2 L2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。# [! ]; R! m; _7 X. N9 Z& Q6 T- {
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。7 Y' a3 a, G+ W
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
* f, E1 L P1 m注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;' V1 ?( x0 W# M) s. p9 h
4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
! e" u5 v5 l5 A0 `+ ]5 i
/ {. \: D2 ^5 L2 {二、脱离matlab运行可执行程序
' N$ U4 C( a' v a2 X- D- j ?) jMCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
1 u- x% `3 h G2 O$ f! | \toolbox\compiler\deploy\win32
- `2 U) r9 E& m文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。) K! s0 i4 `4 L- j2 K+ t# V" s+ I8 @
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。
! a5 t' t9 p9 v, `; O& d在其它没有安装matlab的机器上运行exe文件前:" N( H4 r: g" E/ G# O8 K4 P4 [' \
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
/ G- u+ ?& a: s/ J. E" g其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。2 ?3 Q: c; n( k' E$ I+ L! [- A
如果没有,也可手动安装,添加的方法是:4 f0 Z# m, j4 A7 s
右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
3 b1 w: x9 P" Z5 g/ J# t注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
" i+ @# f. Z3 B ?: [最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。/ h% J( ^, x5 z- ]" Q# \1 @
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。
{, X4 z3 ~% w; E* ~; C9 d美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
4 J- f5 y) X" A% N6 \9 [
% b2 o M# x7 r$ y, s/ Q消除运行MATLAB生成的exe程序的dos黑屏的办法
* A$ e) v: b3 t基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:' G$ ^# A. T. |3 r* I; i
方法一: 在命令窗口输入:( J3 u% w( s1 W6 T9 a; f+ t3 K- n
cd(prefdir)9 R" S3 i" g1 k4 `& O
edit compopts.bat* {- X- b2 X. N' J0 P. y' B# Q
在打开的文件最后添加以下语句:
: C# T% a$ q: r& q ?8 k6 A! r2 Y1 D" c! ^- g9 ~
A.VC环境下:- T" b- U5 e0 \+ l& j2 E$ r0 N
% p4 r/ z2 m/ Q0 v$ C+ F$ a- xset LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup ! A6 _, Z8 _( a4 g
5 I$ T& l: ]- Q! O2 `
B.LCC环境下:- k, o* T% |3 G" `3 {
set LINKFLAGS=%LINKFLAGS% -subsystemwindows $ s2 h! r, H' ^
1 w' _! d. b6 ?, ^% sC. Borland:
5 u3 i6 e* O% X& q. O set LINKFLAGS=%LINKFLAGS% -aa% h# Q* y) S# L/ K3 U& T
7 _( y+ C/ q5 w4 B
保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了+ L0 K9 a9 U. G2 K7 V
9 \5 ?/ ^' ~. z; D6 z. a
方法二:使用suppress工具:' d1 X2 c9 Q _
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
. d& p1 z. G5 g% x* z# N8 W7 Y' b. d8 ^5 ? Q+ K6 S
其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。
/ k% w$ a1 ~+ h! L$ L/ q8 {方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。# r, v+ L% n, R: x
|