matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:
! J3 I6 Y# A: _& r8 l( H) M# r/ O$ |3 x& e& |7 X( h! [
1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
- R& I4 ]2 l; M+ y" lMatlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。2 h6 Z9 _$ q/ Y2 T/ k" b4 p4 c9 N
虽然生成的可执行程序可以脱离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- v! g- D4 c! i7 E n
libmat.lib; `/ U+ u+ d' x$ s& V* g
libmex.lib
6 F# [' W& a$ jlibmx.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"。 ! D0 p+ s3 _! A# H2 F5 w/ A
) ~' ^) ?# C7 G2 ?
1.设置编译器:
2 I2 M0 J0 X8 `4 d* o0 J在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:" S+ }- N4 o* A
Mbuild –setup, 按提示选择matlab自带编译器LCC。
/ O$ l+ [$ }$ N% l4 @+ N2 X$ a" m( L* Y+ g
2.将脚本编译为可执行文件:! a! g- ^6 B4 C
如项目文件包含:gui.m, gui.gif, fun1.m。- l& u; i6 C2 B, z- r8 B
' F/ H* T$ m' W% a% J% }( a+ F
在此路径下命令行输入: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环境运行必需的文件。* \: a+ V! w, l
3 O. ^1 i0 Z3 H+ F+ _& K
3.在未安装matlab的机器上运行可执行程序。- I7 h6 Y* {2 y, |7 g5 Q
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。8 _" o7 @+ N% u4 Y6 p; q
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
$ F+ o9 Q% J y' g! Y. s9 t/ a
f$ Q/ G+ q) r2 {( _( j4.去除独立可执行程序运行时的“DOS黑窗口”。
& d- i8 F g3 B {2 I2 P! g以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
! U9 l7 p" Z' C
, P5 K/ `* }2 R* u a6 Q; Jmatlba命令行输入:8 a% H e. X1 i; D, ?
" f) b, v0 y5 _2 C. ^
cd(prefdir)5 X# q; [9 G+ I; K, a5 l
edit compopts.bat
, O# g/ m0 g7 V* A( T }' K7 E# b' x; j7 G! u$ J
此时compopts.bat打开,在文件最后添加:
- [! k; Y4 q' J: J$ E$ M
6 }1 S# G4 S% `# m; Q" iset LINKFLAGS=%LINKFLAGS% -subsystem windows
t# [& S* k" }. l" A. K9 q [1 t, ]6 M2 r1 e
如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。; J7 Z$ y% g2 S* E9 Q$ f8 v3 D
9 Z- c* l4 }6 M! ~' `1 t另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同% q; b0 Y4 z2 `9 _: Q) ]# D
$ i% G3 d3 t6 J4 Q7 h- r- q
Microsoft Visual C/C++:( B; V8 U9 D. |& f) W
8 y3 m8 {' i0 r( [3 w* j
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
2 {: \8 e Z1 T) C- P4 D
" U8 I/ O9 T$ t0 a/ r! ZBorland:( k+ |) G# ^( {9 H
; c1 z3 y( y& B7 {
set LINKFLAGS=%LINKFLAGS% -aa
# K1 B6 X# m |' N0 g6 S6 |———————————————————————————————————————–8 N( T6 z+ {) [8 U
7 n D- d8 P! s9 h! Q# p& V( I
方法一:% J; p0 F: K. ~) H. f
已有gui.m文件和gui.fig文件% v2 a9 ^& p. o% }, P+ U
1 在matlab的command窗口中输入
' T5 o, Y! M8 ^8 emcc -B sgl GUI.m
3 W% ]" f% @$ `# |! E, `& w2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器- R6 ]3 b1 C4 N" m
: y! l" b+ i+ X; }/ b* Q! r
此时仍需matlab所必需的动态连接库。7 K6 v- B# r- h+ k" U2 n& u
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上/ W$ c" r! A, V8 I y5 a
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,
3 `6 D9 M; L6 i$ @7 v其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共
& l0 a. o( k3 _; ]有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
' T( }2 Q4 e! n$ u8 r. O( `而toolbox目录则必须与应用程序同一目录。7 `" Z* Z; I* h! M" Y; |& |
0 I+ C) E( n2 v3 U! t2 `9 B# S K
方法二:
& s2 s+ }# l' f. n/ k
+ k7 N( ?& [ C( S& y0 v1 {matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。: c- b* F' \& {) a; q4 x( j
# o! s |5 I: |0 c
1. 转化为c/c++程序并编译为.exe) F3 R9 R& v) {/ Q4 R& n
先验证mcc是否可用,用matlab中的example验证即可
9 v" a) m2 f4 ]$ x0 q建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
( k- |: ` b% H& z& v, {2 z! ]由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure' z& F. M+ p6 P; O2 l
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等8 d. W/ T6 Q6 W2 N/ o' r0 {
程序发布需要.exe、bin\、.fig3 B$ p% g: _2 K5 c: W2 ]
4 C" T8 d2 d+ m# ` g2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件+ I" A1 x0 {* [7 S0 w/ ~
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
/ ^2 E& v, @% [另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
$ c& W2 Y; M6 B, ] k0 j2 |+ G/ o) B, N5 D$ g3 M
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布 c7 h1 O7 Z3 h# @# I/ O
以下通过注册表自动添加path路径5 }3 V B( S& H% m' M+ o) B
%————————————————————————————–
: f1 _% ]+ g% }% W9 \2 i( TScreen.Next(); — 进入下一个屏幕4 H/ M( H" U6 z4 ^2 ?# j% Z2 Z( \
resultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
# f& }2 w- o6 N5 o& M4 dif (resultDialog == IDYES) then –加入安装路径
4 J3 u; s/ Q- r- S8 q4 _, @strPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);
) V1 t# u* [# k$ A; `: ]8 x2 O& { if strPath ~= “” then
6 d# R. E# e3 w strPath = String.Concat(strPath, “;”);$ D- o. ^& k4 v: T1 Z
end0 C5 V- @& x! x# [, U( O
strPathToAdd = SessionVar.Expand(“%AppFolder%”);
; _/ L0 [; x" F. ]strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);" x+ |8 E- X& q
— 如果路径中无该位置,则加入
W2 E4 R ~: _7 m* v( b- V0 Aif String.Find(strPath,strPathToAdd) == -1 then1 Y& {3 B- w9 ?# q* p+ o" j% k
strPath = String.Concat(strPath, strPathToAdd);5 `( `9 V0 Y* M$ w" A' m {
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);! l9 C1 n& k" v4 Y7 |
end, M2 e* M |' _) B( l7 l
end
+ T/ W- B9 Z* \# V%————————————————————————————–
' d+ }0 f( m$ T! k方法三:6 S" Q" u( }! z6 T: k& K9 R: u6 D8 }( q
在网上搜了一个方法,还没有用过, 贴在这里仅供参考:
0 O5 r' T9 q8 l \ p一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---0 t" Z) C, _( w/ |4 a
首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
' q) _6 X0 m# X其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
h, y9 `/ c' @' ~6 v第三,在MATLAB环境,执行命令
2 L6 P# N8 i' R( n3 g' ]6 bmcc -m -B sgl file.m
1 ^* G+ J" \7 Y# p" D或者 mcc -p -B sglcpp file.m! M, q# k. {8 A
请键入help mcc看帮助。8 L& }3 P; a* v0 S4 m1 ~( j( z6 P
mcc是在“command windows” 用的吗?8 I" M" A! h5 ~; F
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.
% t+ [7 x% l. O还有“添加环境变量path”是path到.exe文件的环境中是吧?
- F# l; \5 H1 z1 u O1 W6 _
/ _* M5 O2 p* L. _. m6 g7 H二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装
1 A0 d x! {1 w0 d! b, h三、 如何将gui生成exe ?1 @* e! p9 q$ `- n) I9 U
已有gui.m文件和gui.fig文件8 g, _3 ] ]; s+ h
1 在matlab的command窗口中输入 ~, ~; I' v A, H
mcc -B sgl GUI.m' s. b# g8 S2 y! z4 |1 {
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
- [; T0 r& Z$ Y* `) b! s0 B此时仍需matlab所必需的动态连接库。
! {: V/ z d) C3 v5 Z3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上- X) t: A" \" W6 W9 t
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
" N$ I7 j/ L! V% O6 Y5.大功告成。
6 ~4 K# f+ g' Q: x o/ {# m8 j2 w( N. G7 O% F) ^, o" }
外一篇:MATLAB M文件变exe文件5 E0 I3 r" e& c- @, |1 Q6 w
我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序; V1 a2 t& f# i" R8 \+ N3 K2 v# U
希望这些对你有用
/ y! M$ f$ e+ _1 \% T$ P; p8 Z: Z
/ E4 W* V. v6 G- g. J3 n, P如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
: J" H& T1 `. H+ V9 b1 P1 F4 @: m h5 L" {# I" q, X; B
一、生成独立可执行的程序(exe文件)步骤
) m0 J3 s% t& x, K* |# i+ T, g; K$ s
$ u4 r3 H. A* @1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
3 T# h R7 g! }+ S) T2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
4 t5 Y' j ^5 F1 @; r9 r: |3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。# k) N" I( { b
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
# b0 A2 f5 p8 |% k注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;1 F3 i% z9 }7 T( l& z7 V7 q4 }
4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。% V! u5 K/ z6 j0 y. G: e5 p( P' e
* b4 l1 K( T( l* m二、脱离matlab运行可执行程序
5 C' ~1 r) \4 ]1 A8 e$ F' p# mMCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:) u2 k4 `! v- z' r0 {0 T! m" Z
\toolbox\compiler\deploy\win32" z% n7 ?' ?+ F+ e- U5 I
文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
7 C$ ?: s1 y& G. V+ Y. z& U8 r在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。( V* c& N' T& f- l- c6 U0 u
在其它没有安装matlab的机器上运行exe文件前:! l- A( A* k' E4 `% \) V0 _, m
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。( P/ }) O3 r2 N& s+ L; E7 P6 L
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。
) n9 t' h" Z+ l& |7 a. [ q如果没有,也可手动安装,添加的方法是:
' `8 X+ K- J) e3 E- V: {& K' B1 U右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
4 m2 ^1 `9 X3 O% f2 U! o注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
$ m- B7 m* x4 l% ~# A最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
" I; I: v8 j# u2 [, ]- H问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。 z" V& p( g8 p& Q7 m8 S8 P! Y) h1 j
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
, ~& I3 k; A) @' K
! Y* k+ q1 N8 Q& q消除运行MATLAB生成的exe程序的dos黑屏的办法
9 m/ Y* a0 U' z( k$ ]5 G/ O基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:$ Y3 R7 }# n. i; C7 ~% G
方法一: 在命令窗口输入:
, h* y A9 @5 U8 N0 `! ecd(prefdir)
: A; ~* e) k$ C; u: J! c! Q4 ?edit compopts.bat
) e* O0 N) r: C3 M) M在打开的文件最后添加以下语句:/ d! h3 O# a0 S5 k9 r
1 Q% L5 |, @- P, i, @; u$ p, l
A.VC环境下:
4 L3 W9 p- y2 |9 b4 h9 S$ {; z! O- A, I3 @
- ~0 j* K( }( Y- @/ J: L mset LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
+ i) F: j( G& S& Y9 G3 U. l1 Y( A% a' e
B.LCC环境下:' W( s8 v {/ g6 M6 b! b2 A2 T
set LINKFLAGS=%LINKFLAGS% -subsystemwindows
# {2 o3 X. y) a% s) I
$ T3 r9 K* k0 `* z/ G- |C. Borland:5 N( a. l: j2 k& ]" l, R8 u- a
set LINKFLAGS=%LINKFLAGS% -aa
2 s5 G, [8 c; d% ?" T, ?4 Y
2 ^- H8 O1 t4 g( h. _. b保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了, y+ @; C; L# Z s' ]$ ~8 q5 A
4 `/ I2 G- x7 g* l- s0 `2 \
方法二:使用suppress工具:
o; u) L" }+ i# V下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
7 W5 A. b5 }4 |! i/ F) K
0 W3 I2 k8 o& Y4 K其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。
+ \1 G# n" d" L6 {方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
( k: Q, l s% E' \( O3 y# _& L) z |