matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:
! B/ x. P9 D5 j5 @/ M( k1 ]6 Z. f2 F7 E2 u
1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。 q* T( M" B& {0 x. p m' H9 R
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
6 x+ c! U% @1 z0 b% 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* C. P6 n/ t5 l' J. {( U
libmat.lib
# P4 E1 C! D7 _9 i2 F' Xlibmex.lib* ^4 @+ E! X) n! 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"。
8 T. ?, f! N9 x! R
! g2 c; {$ ^. C1.设置编译器:
9 | p$ K1 [2 E9 n; X/ l在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:1 k1 E# j& k0 |& J! b
Mbuild –setup, 按提示选择matlab自带编译器LCC。& N1 x8 N5 H& ?8 c P C- ]
- k6 `6 m: T0 U# s& V1 G, Y$ ~2.将脚本编译为可执行文件:! P- {# h; Q4 m, f9 E
如项目文件包含:gui.m, gui.gif, fun1.m。
: z7 }2 M' }) W0 c" \) R6 i* W: i2 R; [3 ]/ ?3 J/ J
在此路径下命令行输入: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环境运行必需的文件。
9 v- {5 U5 G, [9 ~+ y! R& K" B* E/ w: {
3.在未安装matlab的机器上运行可执行程序。3 O- F" R, A/ ]3 m! q
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。! D6 M7 p% k2 L0 |8 R. {. Q
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。2 e. F1 W2 b# L
' a6 U ?. N& U# ? {4.去除独立可执行程序运行时的“DOS黑窗口”。
6 ]1 z. i3 Q, K( v以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。% n3 d6 c9 o% {9 l. V
3 J: u/ m3 m0 J; a5 l9 s
matlba命令行输入:/ W: Y: }5 c _; k
0 q2 r# r" ]* O
cd(prefdir)
% X- x0 r, [6 s# S6 ]2 Qedit compopts.bat
& Z$ u$ {8 s! ^( f$ k& W' c- b/ J: x5 G. }5 A$ Z
此时compopts.bat打开,在文件最后添加:' e% P- V: w8 e; q7 r
5 e; p7 M% u; _ D" t: mset LINKFLAGS=%LINKFLAGS% -subsystem windows+ ?: Z5 |& b! X+ _9 G/ b
" a, J5 f4 X- n5 g5 q; \ E/ f' [, y- z如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。
& s. d9 U) p( N) o s& {1 x+ { E2 t/ b, B0 i3 t2 M
另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同9 G& I5 q: k: T" k
& T( Y: V+ X/ Q5 k' D1 [1 ^1 @
Microsoft Visual C/C++:% D3 n' O' n* j' i# K3 d' t2 ^
: d& n/ t" e9 } Y& K, J2 A8 D
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
/ g% @/ v; Z, b0 d: b0 q: |2 Z7 y0 S2 I$ U
Borland:/ X9 M8 Y: D$ r3 R
0 G: E9 t8 \4 V. k- {' T
set LINKFLAGS=%LINKFLAGS% -aa
* n0 Y& z; n- I6 ^) ]5 W4 ~4 [———————————————————————————————————————–5 j. L: x7 \6 t( F. Y9 ]/ v
5 k+ [7 m F2 A7 L+ J; l1 |. v, Z9 V
方法一:; P0 e7 Z( D1 _1 a5 w7 e# D' a
已有gui.m文件和gui.fig文件
4 Y ^0 @& q# m1 在matlab的command窗口中输入
3 S1 I3 ^2 M! Q1 }% L" D1 `mcc -B sgl GUI.m
1 h, L1 w/ L8 l1 Z% k2 y2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器; p& w0 p. R {1 X8 w$ {& j
6 j$ ^! a) i/ T1 N' C此时仍需matlab所必需的动态连接库。
8 ]' N1 H; a! W3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上! n' d3 b$ f8 |5 _. u. ?4 j- t
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,
/ N* j- S: t# H# N L& X1 e+ H4 r其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共
K+ x1 C% y2 z* w5 P& |" n有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
* m/ {1 Y" Z- |7 `6 o, ^1 _而toolbox目录则必须与应用程序同一目录。0 B& J& X# d1 k
6 |/ V, \4 R( f, w' E! O) N$ R; r$ I方法二:
+ C4 l7 \+ ^6 Z9 L0 \: {5 @, }
& ^, k% e6 G2 ^9 D/ s1 lmatlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
, M& L& s) A' F4 l
5 ]* b$ p. [" p1. 转化为c/c++程序并编译为.exe( P; D* w# D, `' S8 G
先验证mcc是否可用,用matlab中的example验证即可
9 c1 S. G+ y4 X5 E9 J建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
6 D# ~" l; ?! K/ C9 L5 f由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure3 a: z" L' |8 C8 V* u
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等0 `, l0 M1 R" _" m7 o
程序发布需要.exe、bin\、.fig
. W1 V( u) F3 T2 E2 \1 c. N6 U8 f
* X! Y) C+ s, Q7 A7 l2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件$ J$ [+ r$ L7 V8 G* Z. K
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
% G' ]. {9 h' @- B9 `3 @另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同. k: c$ i& B+ C `+ X3 Y- O, b
+ {4 W5 h: m7 k( {% k' n
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布0 S* Q6 i! Y$ E9 V
以下通过注册表自动添加path路径+ O/ e4 X& o/ w c, n5 `+ t, T
%————————————————————————————–" E& ]9 l" `- U8 u* Y/ c% ?2 z2 C
Screen.Next(); — 进入下一个屏幕
- ?5 x5 k$ |) |8 J/ z# V6 EresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
1 K9 [2 ^6 ^0 H t& v% rif (resultDialog == IDYES) then –加入安装路径
; D$ \* _& ^ ?! D# W- OstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);* M5 D- U/ B" a; t0 w; G$ j
if strPath ~= “” then
( r# a# f0 m# B: Y, D; L. ?/ K# u strPath = String.Concat(strPath, “;”);9 q% B1 F- X, x: t7 R: L, p
end% c, v4 [4 X$ O) E
strPathToAdd = SessionVar.Expand(“%AppFolder%”);! m$ f0 z0 K/ P( v% F" T: E$ `
strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);
; h p& ^5 g* v! w# L— 如果路径中无该位置,则加入
3 z9 c) L% }+ U# f8 sif String.Find(strPath,strPathToAdd) == -1 then( V1 x% A" u" e, A$ r
strPath = String.Concat(strPath, strPathToAdd);
( z! O: t0 _ v4 S8 X5 S Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
S2 A) h6 a3 N* t9 y+ C& m1 C end
- R: m* ]7 y. \" |end- c# C- [" K( }9 x: a- Z7 `
%————————————————————————————–6 K+ l/ p& |" |
方法三:/ X5 }7 I+ R5 y& D& `9 Q% G* ^8 ?
在网上搜了一个方法,还没有用过, 贴在这里仅供参考:
( r/ K+ Q5 E' m7 I- v" z一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
( c6 b2 m- R5 V2 z F# A ?+ w) x/ v/ k首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
* o/ g6 u3 f) f! t+ m2 Q8 M) E9 [( k其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
9 g: I7 q! i/ v" t- Z3 i第三,在MATLAB环境,执行命令- u9 R: s) b& d
mcc -m -B sgl file.m
. ^3 E% P* s; P/ m或者 mcc -p -B sglcpp file.m1 ?) t# n6 B- z; `4 q2 L* v
请键入help mcc看帮助。
" @5 r/ y8 p* Jmcc是在“command windows” 用的吗?" M- E/ ]: w6 P, B8 O0 U
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.% o) m8 K; q, g" |1 c, |
还有“添加环境变量path”是path到.exe文件的环境中是吧?
' \% l2 w* y* j: w3 [5 S, F4 N4 r0 t
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装/ ]' B9 A# J5 I; B5 c% {& D% p& a
三、 如何将gui生成exe ?% m9 b$ Z, D) ^2 a+ L. E" F
已有gui.m文件和gui.fig文件4 r. K/ d4 L& Q8 U3 N: i4 U4 e) q, y
1 在matlab的command窗口中输入( x4 }& m& `4 m* @
mcc -B sgl GUI.m
& p! y8 w/ |2 s, H5 l$ @2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器, o1 v7 T9 C$ m( o% g$ i4 Z* [
此时仍需matlab所必需的动态连接库。
( x# H7 C9 ?4 y& T% w2 c7 f3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上2 O2 ]9 z/ U& X/ n2 O
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。9 X$ u) U- p8 l7 C" K: ]$ ^0 r- |
5.大功告成。 % Q7 q7 W: A/ z8 V S W! y
7 k1 V a) O: b+ M: z# E外一篇:MATLAB M文件变exe文件
+ V, H; ?2 _) E. f我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序
" r1 o3 ?+ [1 x! i/ t希望这些对你有用1 ]& u" K2 K% D9 ? E5 }
6 s$ Y |, d! Q7 M' Q/ J- t8 x+ N如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
s$ M' a4 e0 _$ @$ w
7 y0 ^* x" v7 |* ?一、生成独立可执行的程序(exe文件)步骤% L# l# T; u ^1 D
$ a1 A* |1 q% Z1 n. H, T7 j" P1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。1 r0 @7 A* R. T- B8 |
2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
+ M- p+ f6 x1 q8 ^$ M8 F4 ~5 h b3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。- K/ [$ R. {: f' V
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件; j2 N k, v0 Q* i1 ^
注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;6 d* T- q4 a2 d( }
4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。8 j. L- q& c* D! c7 M/ ?
' c1 C4 Q, _9 `, Z" ` B$ E2 t. {二、脱离matlab运行可执行程序
. }9 y7 ]2 v2 p2 a1 \5 E3 p- HMCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
$ }2 u, u# E# u7 C F: U \toolbox\compiler\deploy\win32
. }/ E2 X; A* k( Q文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。7 e7 `2 \4 g# ?1 M& c; R# }
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。. E8 R" W9 L6 D7 D/ e, {
在其它没有安装matlab的机器上运行exe文件前:% G- O; l& L/ I# B/ F2 c; s* m
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
+ {/ D9 t0 b" T' X0 W& ~其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。
; u. o" d" m& ]# t9 f; x, U如果没有,也可手动安装,添加的方法是:
# u8 ^% }1 r! s$ J& l- l右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。1 E! F& W9 G; W5 K6 k2 [9 }
注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。 i6 n! P5 y. v4 d; v9 S2 ?( ~
最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。" R9 e1 {2 Q# R+ J0 D3 F; ~7 {
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。7 _/ G4 W, ]4 J- w5 D+ Q0 @0 \& @, ^
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
; g2 J x' v1 }1 x, {% \4 G
1 q) t4 i" Z# m" R消除运行MATLAB生成的exe程序的dos黑屏的办法, K9 O8 P: J3 I
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:
7 z @/ y0 V0 ?' i, }方法一: 在命令窗口输入:
; [; j! J9 Z' `cd(prefdir)( e" }, _6 ~; C- \: r4 c
edit compopts.bat! p' r1 @% x* Z7 Y+ J& j8 G1 O% [
在打开的文件最后添加以下语句:+ `6 T9 N; [9 c
6 C) B3 n0 A5 h5 A; R. FA.VC环境下:& N- T3 z: f: L& J3 g# @
+ P' f9 l6 z& U! O$ @set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup 9 k# e) s% q- {. I9 f
1 o' ~0 P3 h3 q0 ^$ T9 v$ m
B.LCC环境下:5 S L, Q& I! L
set LINKFLAGS=%LINKFLAGS% -subsystemwindows
$ O" z0 ~) D7 Q M# ? t) f( b: d" S( d" _, ^ @1 p
C. Borland:
3 C. I7 U; ~, N6 G# Q6 T/ l set LINKFLAGS=%LINKFLAGS% -aa9 ~: P# [. @ P" ~4 A( E3 y
; ]* ?: x/ ~5 V6 J
保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
+ O- N3 N4 j- S) O% u2 }2 I# | l& t+ U* w7 \0 a
方法二:使用suppress工具:
7 k+ P2 X' ] ]- j' d下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
8 s+ z: T2 K5 C1 v- t
5 ], f' q7 |: {8 L8 D8 A其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。
) q3 A) F' `/ H: a5 m方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。* r1 m" {: {. z& }
|