matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:& {9 K3 q6 O6 F* i7 A' p
: H ~2 h% J* N# H) Q9 ?
1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。" o% S6 F! `: i0 c% o
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
+ H+ q5 r+ G- \虽然生成的可执行程序可以脱离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
& f2 A& w c7 T mlibmat.lib
, s9 n$ k" d* C' m5 X1 llibmex.lib
. g: D; V+ n3 }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"。 ; H& q- U/ e; h% n1 J/ k% @
" ?+ L( d/ @* V! ]- c4 M+ c" j
1.设置编译器:8 K+ ~5 V; N# f( N u
在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
& r% H3 ~& N3 `3 P( ~% k* BMbuild –setup, 按提示选择matlab自带编译器LCC。+ n9 m" C( y# D
2 w0 S3 j: `' T2 f* q4 I+ D2.将脚本编译为可执行文件:; C! v& e' Q0 ]' s6 w
如项目文件包含:gui.m, gui.gif, fun1.m。
; ] s7 X& l/ Q+ u& v4 K; L5 B2 @* t8 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环境运行必需的文件。
: z) |+ T: \. `" Y8 m ?$ t/ `5 ], z4 y% d. D. q; s" X0 F7 j$ w0 M
3.在未安装matlab的机器上运行可执行程序。+ q8 \, P( i5 h# Q6 a& R
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。4 I7 R* J& n1 B& h0 e @3 C1 m
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。% `+ {3 p- d8 W6 l
4 S7 o' G1 W! }8 n9 \; m0 o% d* e6 x4.去除独立可执行程序运行时的“DOS黑窗口”。
+ O& [5 m& W" C, L3 P! w! N以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
T& p, w0 h6 n- e g& U1 K# ^& I, Z2 q- o" \4 ?
matlba命令行输入:
0 a* V* v% _2 w. f! F# |9 s2 O6 a# l1 }# U( r+ e
cd(prefdir)
S7 f, v; f* {- Oedit compopts.bat) c& K! R# [3 a) {
/ L4 P7 c$ _0 D: x
此时compopts.bat打开,在文件最后添加:
+ |/ c; j) x. k+ f0 D& ?0 Q' i0 [* V* H, b7 j- ?
set LINKFLAGS=%LINKFLAGS% -subsystem windows
N+ a3 S4 [' g$ l9 k: [: v: f, k4 R* _: U4 ]. T
如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。* i* q+ d5 R$ U5 F+ F
6 [* ?4 o N' i. |1 e另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
/ y# O9 g1 w4 h. x( x/ N, [; ^/ ]8 ?; |7 z) Z7 {" t
Microsoft Visual C/C++:
) s5 ?: h) k7 w# \. h/ j1 y5 ^. _& _; |9 K
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
' M4 [' Z5 W- C) m
+ v! W/ H5 C0 `; `+ |/ HBorland:" p, \, k8 Z" h$ F8 p& I6 m3 B
! s8 `, I4 V" {& y/ |set LINKFLAGS=%LINKFLAGS% -aa ~' l7 ~' _$ W2 d6 b. ^" o
———————————————————————————————————————–, O9 i6 z7 i; K8 [
( y! N s, o8 I. b3 F方法一:7 \! W) I! s G3 u* J% q
已有gui.m文件和gui.fig文件
9 ?. P0 o. C- F* E; z9 i1 K* f6 `1 在matlab的command窗口中输入% u% Y* N: {# t0 g
mcc -B sgl GUI.m6 l# L( ]1 ~* ^. b) l9 s9 k
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
# I0 A% j6 f7 P5 k5 m7 o- I! p1 X% q0 R1 j
此时仍需matlab所必需的动态连接库。' |" V/ r" f$ E7 d- j# m1 i. J4 o5 c
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上: M; _7 r+ A8 M5 E0 s: ~; k+ `
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,% b; O1 r A. [- s" V
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共% n% p8 p6 J+ Q. B; p5 y( } C, o
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。. l% p) y2 P" E+ ^4 L8 I
而toolbox目录则必须与应用程序同一目录。
9 y6 o9 U! \6 v& W5 N) X, h- J, e& }
方法二:
' N: Z# A a. `# m! @4 b) S0 ]! d8 F: n
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
& e! W) g6 E0 r, m5 z! V) K) A: O# F" ?+ o
1. 转化为c/c++程序并编译为.exe) A2 Y3 e( D6 p; U. ^
先验证mcc是否可用,用matlab中的example验证即可' K0 b0 L) `( m8 O5 J
建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装); x4 C- V! A- s9 o/ N
由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
8 v8 i) p7 K' w编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等+ ?( a' ] y1 c' V" Q9 Z
程序发布需要.exe、bin\、.fig
+ q/ F; J' O3 M$ m7 L- y: q$ p6 ]/ ]/ L; ~ l. c, ^5 O3 X4 ~' Y* b; t
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件! I5 a: K' z# s& N* l) X. `* [% e
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径6 x% I7 L5 S% h1 ~2 z b
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
4 b/ |8 h( ?% N$ O+ w. F( y p& _: D# k" w5 z
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布! K, d M+ h8 t% M
以下通过注册表自动添加path路径
9 b' v6 Y: B+ o' l/ ~%————————————————————————————–/ }/ M B. o4 Q- i0 ~% W$ Z
Screen.Next(); — 进入下一个屏幕
; Z$ Q, c# ~- O$ l1 oresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);' K/ n0 ~3 u2 U, N4 s3 t" X7 M
if (resultDialog == IDYES) then –加入安装路径) O1 ~9 T1 E9 X4 t, O2 H) G# k
strPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);
0 \3 o) S2 i1 x9 w% ^0 M3 c if strPath ~= “” then
; T; ]+ ^7 Z* Q; A: p* V6 V" }+ b strPath = String.Concat(strPath, “;”);
% M! D, f$ S% a# |end% H9 q k F) \- F
strPathToAdd = SessionVar.Expand(“%AppFolder%”);
4 A* P8 m9 f4 g2 m6 kstrPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);
" X r2 \2 S* y) }5 q0 }/ h— 如果路径中无该位置,则加入0 u" F! x8 K8 d* N- q
if String.Find(strPath,strPathToAdd) == -1 then1 A3 {: c' b$ P' V/ `" |+ |8 w8 i
strPath = String.Concat(strPath, strPathToAdd);8 `, l6 j- \& O& k9 b
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
3 N5 ?! j" ]! y8 v$ B3 w% \0 ^2 ? end( K* y/ h* ~. s2 U
end
) J: U9 D* d; B, H) Q' ~2 i! K%————————————————————————————–1 U$ d' t8 }0 J
方法三:4 B# M4 N" L; L
在网上搜了一个方法,还没有用过, 贴在这里仅供参考:3 k3 c1 P' J, X: X6 N, _: g+ F4 ]. T
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---" x4 [6 b. q) E
首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
$ d7 L' o( S' w其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
; l( b' n1 [; `; P第三,在MATLAB环境,执行命令2 `* Q! }9 O* P0 q6 y- ~5 k( q
mcc -m -B sgl file.m# p6 {- b5 I9 B; o* Y+ u
或者 mcc -p -B sglcpp file.m0 b# t, v; e i# J7 y
请键入help mcc看帮助。
" g( k9 _ ?" G/ Lmcc是在“command windows” 用的吗?
& n. X" D" g; m0 P8 c' m/ O只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.: r# G0 w& c2 K9 E( Y( h
还有“添加环境变量path”是path到.exe文件的环境中是吧?1 O9 {8 j; a" d- w4 e" W
$ i! K/ t+ _; y8 J6 Q, U4 N) s9 [二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装! i: V+ t5 ~8 U
三、 如何将gui生成exe ?
7 B3 A( N5 J6 m. [$ `8 s已有gui.m文件和gui.fig文件
6 G+ X7 { x4 K1 在matlab的command窗口中输入
9 n& m% m6 P0 m9 D3 }: rmcc -B sgl GUI.m+ \/ ?, {# a- @) Y* C2 Y* r* j$ z
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器6 ~& { [4 }( `% Q# M" ?
此时仍需matlab所必需的动态连接库。
. d3 c5 X4 L" ]" r# N6 B. @1 x1 {8 W3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上3 @: m, Y( L+ h9 j; G) C
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。/ F5 v* Z8 h4 k5 ], A
5.大功告成。
, |7 t/ K9 v8 Q% v5 u/ w, z2 \6 d# o4 M+ c; s
外一篇:MATLAB M文件变exe文件
( w6 [9 P: N% Z. N! o) L1 S我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序+ h w' _6 L* x& `
希望这些对你有用9 d+ B" Y4 `* g8 P6 @
* D! S5 S4 y; ]1 I! ]+ K- w! y1 b
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:! }' L9 E8 A; M6 u0 P5 b
* r- `5 j2 @" t4 E7 P/ h* t
一、生成独立可执行的程序(exe文件)步骤( H. J/ y) |) o. v/ ~& }7 l# ]: b( q: Z
. p0 |$ c* t' a |
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。9 [7 U6 E2 W2 l: [5 o5 W
2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。2 X7 m0 M k2 h& V
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
+ _2 D- @) Z& O( H- Y5 u3 S3 h当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
5 _+ Q) u; l6 w8 M注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;$ ^1 N6 X. G) F/ I( u; m$ I
4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
" x+ K" j7 h3 V7 D' M" F! _- k, L6 c% X1 d6 r, w; Z
二、脱离matlab运行可执行程序
z/ f/ r3 ]1 S- Q. u# tMCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:% s' X1 M: K- ?* b; h1 d
\toolbox\compiler\deploy\win32
) `6 K! _$ ~+ Q. S* L& u- L文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。, m* c. ~* Q; P4 p) g+ Z+ } Q
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。
( p; F# E7 l/ O: t) L% r- ]在其它没有安装matlab的机器上运行exe文件前:' y# Q' ?6 o6 h+ H
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。3 j3 B5 B& F5 g) s
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。
7 {( m* L; E4 Z如果没有,也可手动安装,添加的方法是:
- P, k# R$ H+ A2 {& t右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
- m# {, k; X+ a: u5 t* A注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。1 @5 Y1 a& c+ Z( t1 s# ^) X( {1 G
最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。& u9 ? e f. [/ B# X0 P' \: Z
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。( R$ L" y7 e" v ?+ }
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:% I! t; C* u4 e) F) y4 C4 W
8 f: X% b& o$ Y/ r* B
消除运行MATLAB生成的exe程序的dos黑屏的办法6 [; L9 x3 t6 I( j. ` a0 E& |9 S0 |! N
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:4 Q: q' r6 L- J% Q, I
方法一: 在命令窗口输入:4 \' P4 M4 \. O% [
cd(prefdir)$ w8 ^/ x0 x/ [7 ^% S. l0 u! a
edit compopts.bat
) R9 l' @9 h5 q: r在打开的文件最后添加以下语句:/ n2 C9 N- L4 d; ]' u5 Z
- N% F3 s1 n: Q- h, L4 x) QA.VC环境下:
+ `4 a9 W- N8 o) I4 i9 |6 j. B2 B6 Z+ y7 x L
set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup + F/ z6 N1 h3 U; L
- i2 Q/ {, u; z6 R
B.LCC环境下:
8 A T" Y$ A: ^/ r3 pset LINKFLAGS=%LINKFLAGS% -subsystemwindows $ x* \3 F% {5 ?/ p- H
* o( L2 w5 r) L [" sC. Borland:
/ i1 V* o2 U0 u set LINKFLAGS=%LINKFLAGS% -aa# {% l/ ^1 c& v" `7 d+ T2 \
5 T- }/ _" ^* U
保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
4 I. f$ T5 u, t3 ?# A
! f! |) [- n4 h7 N' l方法二:使用suppress工具:
/ g n- S5 e( ~! W下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。4 r: a/ y% v. E) I+ b" N" |' o
/ }* @3 t$ M1 B7 E0 F0 Y% J
其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。
* I+ ?5 N7 h8 y) L- @" Z, F2 M方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
[9 d3 d, E* x( D+ a |