matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:: g7 H, U' x, M
7 Y1 x+ A4 M- h0 k1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。' M' {+ Y/ e" W& F
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
5 m( n' ~' x1 e [虽然生成的可执行程序可以脱离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! V6 d, H- w" C
libmat.lib: f: a9 b9 `! f6 @7 ~5 Q
libmex.lib
3 o" C7 Y2 f& n! l) K e4 alibmx.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"。 3 @- m9 G8 I0 @0 l' L- l7 ^7 C) ~
! Y0 S8 e8 M4 V9 o6 V( }
1.设置编译器:
5 l' O7 v, q: X; M在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
) X; w* v! h( F2 S+ eMbuild –setup, 按提示选择matlab自带编译器LCC。
; Z+ o, K* @5 m: m3 a O; N2 k( T! Z& T& q
2.将脚本编译为可执行文件:
+ {" V* `/ m( Q' ~如项目文件包含:gui.m, gui.gif, fun1.m。
) y6 j0 `; f0 s, r4 {' ?8 {' x. E8 q/ |! ?
在此路径下命令行输入: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环境运行必需的文件。$ ]6 l- z0 K6 e( Y) O
# s7 D; x3 E; E/ t. _7 N3.在未安装matlab的机器上运行可执行程序。0 \2 q" O5 G" m! d4 H* r- U3 J
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。
" b4 P% J3 Q: s( a$ }将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
C: \) G9 `$ _8 Q
N5 F+ U$ p- M, k# J( u4.去除独立可执行程序运行时的“DOS黑窗口”。
; j; o+ X2 n1 C+ H' T以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
3 T& c+ {- j0 i0 b# G7 W+ x" o) q/ x9 O1 a- b
matlba命令行输入:# I( G2 G8 r0 k
6 [. z/ @' i% M# m9 Zcd(prefdir)
0 x3 \0 I. U9 F0 [8 d, i* Pedit compopts.bat
* W8 |8 U4 c! |! y4 r* ]
' s4 L" U9 |$ o4 j7 H' x H( }此时compopts.bat打开,在文件最后添加:. E' A0 t) y! S' B
n& K5 |: U! R: Oset LINKFLAGS=%LINKFLAGS% -subsystem windows
5 b* r& ~' v8 ~8 k( P) k) E# q5 K) Q* h1 j# w7 N
如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。% ^' g2 I' i% J# a+ O, h8 q
9 A" q B" j' p
另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
! H4 B4 d) P: @4 Q& o: H; {5 s8 F& L% S! Y- g* ^
Microsoft Visual C/C++:
$ {- C: f* p+ _! w8 W& K8 e/ H& V- K" N8 i) Y: a2 I
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup$ P m. g( n1 E4 f3 q
$ O% A% {4 Z b8 N& i8 O6 pBorland:9 q3 v N2 N( n( U: l3 B& r
( m, ?( Z, \* a4 L
set LINKFLAGS=%LINKFLAGS% -aa `- B3 d2 b! M/ @
———————————————————————————————————————–
+ u! g Q+ i' I, @+ e- M+ s5 _
u$ h4 T' h4 c$ ?) F方法一:! O! t& r f: O2 k# l" W& m, V
已有gui.m文件和gui.fig文件" P5 z0 L4 m5 Z9 R
1 在matlab的command窗口中输入
) v& p) s0 L/ z7 M& Mmcc -B sgl GUI.m% w; p* _; L h f" [/ q" `) J! b
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器$ \( G) u8 t4 z3 H
' q T- [8 T( [) t/ M% J; k q8 a
此时仍需matlab所必需的动态连接库。
" D( M* L5 C* G/ U3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
0 O' H# j! [/ A! _1 j( i( O4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录, f6 d: J" V* p8 B
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共
3 L' H" M. G$ c# q* D: c2 X5 S有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
3 h+ R! K7 h+ e1 n0 z. C而toolbox目录则必须与应用程序同一目录。- j; l+ ` A% w" ?) O
2 F8 z# l) i! K' D5 Q4 ~1 o/ E
方法二:" Q \3 j0 f( Y, ]: q m
& A" m# T1 d( C+ C: W
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
. A2 f v0 G) l- _8 q `; j( @) l- m9 s5 h; c
1. 转化为c/c++程序并编译为.exe
D3 a) i1 Z6 L4 v& ]8 ]先验证mcc是否可用,用matlab中的example验证即可
1 {. q% C$ s7 x- Q& [7 Z建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)# @! z9 k. R9 f* |
由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
( J3 Q0 @ H+ S1 S" A# E7 A编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等
( y0 b) K/ k4 l程序发布需要.exe、bin\、.fig5 X, q* c2 T' Z5 |2 s* m5 c' ]1 E
2 N5 i/ x5 @0 k H
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件
! [* y% q9 r' q, K前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径" W2 K! E; y B
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
( }& n/ f. \- S) S& ]; [% ]2 ^" X' Y. e
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
$ t9 Q* U! w' Z) E$ i以下通过注册表自动添加path路径; w0 B8 g+ a! C) N8 j; v
%————————————————————————————–
4 Q, i& k, j' Y1 v. YScreen.Next(); — 进入下一个屏幕
+ {3 g J h( C: U& mresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
1 Y) O% r* k, c6 J2 r' G: Oif (resultDialog == IDYES) then –加入安装路径
5 g* S: Y' S5 c, A- t5 h) sstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);. `, X, U- \- d, E
if strPath ~= “” then( s E q& g3 z9 i
strPath = String.Concat(strPath, “;”);/ C, p) J) ~: |: R
end$ Z! @! Z# `( N f% T8 E
strPathToAdd = SessionVar.Expand(“%AppFolder%”);
2 ^4 ?9 M2 z; K1 d, estrPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);
/ N" C: W/ [' j2 v! h/ P— 如果路径中无该位置,则加入
% w0 K; G/ Q9 Hif String.Find(strPath,strPathToAdd) == -1 then
# O# b: o& f& N. H; z' e9 `4 E4 b strPath = String.Concat(strPath, strPathToAdd);* l8 I3 G' L- E' b; r
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);+ ~3 _* ~3 T+ X& B" y
end% y1 n* j) u% q) X
end) L9 [+ M" T0 x+ q7 I2 C
%————————————————————————————–- Q* l$ p' G" N/ \0 T: @
方法三:
& y# j1 [$ d8 B+ N! v0 r& t: B7 X在网上搜了一个方法,还没有用过, 贴在这里仅供参考:) G$ P S: }' Z) }4 h5 l: k0 k
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---+ b( c P2 U/ [1 i. F3 q8 t
首先,使用mcc编译得到.exe文件,具体参数见帮助文件;" W$ T3 g3 z3 r* Q2 Y" K* B
其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
; Q0 X( J4 u( I1 A- P第三,在MATLAB环境,执行命令
! t+ F& X6 V3 \3 ^- H% Imcc -m -B sgl file.m4 }* l0 b- j' q% ]! d w
或者 mcc -p -B sglcpp file.m2 m: L" m7 W5 ?; M7 i
请键入help mcc看帮助。
. u8 h8 d7 B7 F5 Vmcc是在“command windows” 用的吗?
4 [6 N* P! E) |3 \/ Q9 M) Z; u E只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.
/ \3 N' s3 b# m4 N9 h1 r, _还有“添加环境变量path”是path到.exe文件的环境中是吧?
6 U3 ?2 p0 T% ~
: O% \: l$ g" F0 [6 ~二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装
) E$ [! u& e1 j$ L8 ^; K' Y1 `三、 如何将gui生成exe ?" o' \: S3 x' \
已有gui.m文件和gui.fig文件1 t9 y# @8 q" |7 ]0 D
1 在matlab的command窗口中输入# G; }# p& s, w$ F! [4 T- G$ W
mcc -B sgl GUI.m
: M: t( k( n1 G( L* z2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
! `0 q7 Z: M% k$ k% s- a: j4 O" }此时仍需matlab所必需的动态连接库。, `' }0 }) n& Y. l7 n& n5 a
3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上! ^7 o5 z8 K" v+ `3 o( s
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。! c$ \/ U: H8 [ t5 D
5.大功告成。 2 I0 S! n5 f/ \
0 L9 D$ v* M3 h" G! l外一篇:MATLAB M文件变exe文件
1 B% D2 I2 V9 D% C. T- Z6 }我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序: G& x% x& b8 X6 Z6 H5 `
希望这些对你有用
0 [. J: P9 p( B/ L6 L* h. P4 R |: }) Y# e
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
6 c" Q/ j3 y4 \9 h6 L+ `2 G# P( K
& q: B; j7 l: [) ?. `一、生成独立可执行的程序(exe文件)步骤4 b0 |* [: K$ X% O
9 C# ?& j- F6 X/ k
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
7 _1 z/ g( s( E! c* e+ l5 L2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。 R- b$ s* E% _' C7 W4 ~0 C2 I& o
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
+ c4 T7 u0 K! \( A. z当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;( a0 S! `6 B$ L$ T9 M( @3 w
注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
) x/ s, J5 M2 X/ C4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
6 ~, z, u+ N( _2 S c
3 ]$ q! L o% P& v; ~! V二、脱离matlab运行可执行程序
; } ]8 A3 \4 h, fMCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
7 r( L' D7 S% `/ Y& m7 A: d+ s* e \toolbox\compiler\deploy\win32
+ e2 g; U6 V! b+ N文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。9 _3 x) B: W, i1 X# R% k" `
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。
* }' O1 h7 n F- Y8 X; R在其它没有安装matlab的机器上运行exe文件前:& M3 h( _4 z0 ]8 v7 E/ c6 A6 _
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
- T" p% l5 C3 U- u/ m! i其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。
! }; Q, E. j" d如果没有,也可手动安装,添加的方法是:/ D) l a( o9 K e- ?0 o
右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。: c ^# K9 `8 u5 _" B) I0 M% n
注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
+ X4 E, s8 K' U ^ S最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。6 V+ c+ t2 s( r$ u" A. a" k
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。
$ a- _4 ?3 D9 A! Z7 n, o( K美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
' ]& X( ]/ U3 L8 C0 I4 Z7 {- n+ W, ~
2 S. u) D( s C3 i: ~1 G0 v消除运行MATLAB生成的exe程序的dos黑屏的办法
0 r% M9 y6 s8 Y/ G基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:
5 ?; I- t0 Q7 ?. p" L- M) c方法一: 在命令窗口输入:. b' d+ p! m2 \+ X- _2 \& G, _
cd(prefdir)
2 s/ b* _# U2 |. h* j( w) g; w$ Aedit compopts.bat- @9 a( l. _- o/ w) |" {
在打开的文件最后添加以下语句:( W, v1 }6 E& V4 R' q( O. K2 z5 M4 u
8 N8 {) h" N E: O. _( k
A.VC环境下:3 G2 G' C' W% N
; R. N, S- `! u# f, k4 Z/ S A
set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup ( d) g& |+ d" S" N; T4 ~6 @
- q6 N4 C6 ?+ g& [' D2 |
B.LCC环境下:3 t6 @8 e4 m W+ |# Z+ x( ^
set LINKFLAGS=%LINKFLAGS% -subsystemwindows : l& q/ Z$ v% f/ o: l
' G4 m0 J, q0 mC. Borland:2 N* [! ?: P: u: v$ K [
set LINKFLAGS=%LINKFLAGS% -aa
7 H O; }7 _, M. k" ?# L- P% W! z# [
保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了- L! _" o. g" j
5 Z; a2 j. |, c/ k方法二:使用suppress工具:* T/ |9 B) \& f" Y" Z
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
) Z! Y% l8 F) S7 P$ ]4 r" ]
* a: P# j2 W5 y- ~( K. a其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。
) d3 `* O8 Z+ x s) ~# m/ Y方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
r: E- Z: r6 ~- J0 u2 x |