matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下: w1 @! g6 \% S8 [( s
0 Q3 r: V/ [5 _% b- K) |
1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。$ E" n+ L9 X T! W1 }% A" ^' {
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。( Q! C8 @2 [- M7 I! _+ A8 H
虽然生成的可执行程序可以脱离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.lib6 {2 V3 `! l3 P( H4 N" _1 q
libmat.lib+ r: f0 N! D% F7 r& Y. u$ b& V
libmex.lib% p- J1 e t' X9 E3 g3 T
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"。
m% d& o+ y0 w$ y0 M0 ] ; R3 q, P. Q- V/ S3 ?& T3 p! ]
1.设置编译器:9 |: ~$ W3 Z F4 C9 i
在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:& c: p% ~7 G- t. Z/ Z, x
Mbuild –setup, 按提示选择matlab自带编译器LCC。" M `6 a, o5 I M" F3 p4 I( |
4 a, k) |# \" B0 Y( y
2.将脚本编译为可执行文件:
1 k" A7 j' J. X v如项目文件包含:gui.m, gui.gif, fun1.m。
% I0 q0 j" L- L" }5 e0 P J7 N- W' z
( @1 I& n1 S+ I在此路径下命令行输入: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环境运行必需的文件。
# G# d- n, K/ Y3 H: B/ E+ g
6 E5 M. a1 D6 Z7 e+ x R/ C3.在未安装matlab的机器上运行可执行程序。
4 J' z9 D3 c) N+ C将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。% F2 i! |& x2 S
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
0 b# l# G1 D3 I4 Q+ Q' J& ^# H% c1 p# \; X9 C, R
4.去除独立可执行程序运行时的“DOS黑窗口”。
9 X5 ~" @' P) s" z8 r) F以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。' b# s3 S4 u x. K5 d0 N5 W- S
) Q- c& V9 v6 K$ y; ~ R1 r L
matlba命令行输入:
) P3 P! ]" _* Y/ M7 w2 \2 l6 Q! E9 F
* u4 a7 ]+ C) |* R, |( X# I0 S: Pcd(prefdir)% _+ B) v" l1 R9 P! Q4 n( M! M1 s
edit compopts.bat- u& s3 m. m$ T7 d2 ?% `' i+ u6 J! Y
/ U) _5 e) n/ E8 ~7 W! x8 \
此时compopts.bat打开,在文件最后添加:) @" e( B8 Q/ A. Q
% V- F( ]8 w/ J \$ s0 Y( E `set LINKFLAGS=%LINKFLAGS% -subsystem windows
! l/ N) m# p/ Y9 | V4 H1 ?9 w0 q. K) \/ L) ~# _: j( _
如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。
( I$ o# c* r, l# S* y1 W
3 _5 i d7 X. Y- q) S7 ~另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
$ U: B Q. ~4 N5 ]" b/ ?0 c5 ]5 z+ i
Microsoft Visual C/C++:, A' s* b3 i1 m* Q9 t5 a+ K
( e5 F% H# G, q5 e% D" Q
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup: Y+ \% O8 Y# [* H( h1 {0 _: \
3 g0 e, n% k5 ^' N) Q, `% Y
Borland:
5 n- [7 N7 Y4 P1 ]/ o2 b
# ^, [$ O8 a# U3 lset LINKFLAGS=%LINKFLAGS% -aa+ c' F% u9 N0 W, e. Z) z! }- ~2 @
———————————————————————————————————————–# z, R, g( v% f4 ?8 l, D
( b' w& r0 o5 F
方法一:
0 G. Z! n W! h) E# m% Q已有gui.m文件和gui.fig文件
( y( b5 N9 e7 K3 r1 在matlab的command窗口中输入
f7 E+ Z6 r# ]& u: zmcc -B sgl GUI.m! p: g! a' O N' V1 R
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
/ m0 J3 t5 C9 `2 I/ m1 W. ~) K
6 L! H l) M2 s此时仍需matlab所必需的动态连接库。
: A( n- L. V0 q+ u. f2 v( c/ Y3 T3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上1 `/ |4 Z6 P+ o. [6 [ u l
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,( ?: t( w: e9 |* x" H
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共6 i$ b$ }" q, D( ^; m3 v
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。# q3 K! T5 ~' q! S1 n8 q
而toolbox目录则必须与应用程序同一目录。
3 ] l |2 }$ O
7 k4 d" Q7 J9 _方法二:
1 X/ C& l' H P+ w& l2 j9 U, M9 B9 c: v: ~# D
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。( I9 ^& L! k# ^! W- u
6 f/ W* ^5 l0 A9 E: `2 ~1. 转化为c/c++程序并编译为.exe
4 o' u; u, w8 B, p! G+ P先验证mcc是否可用,用matlab中的example验证即可
- I0 D8 p1 b- N3 [建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)" Y1 `6 T" C' F2 N6 n& k
由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
0 K) \7 r0 l3 [8 t编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等
8 L; w# F9 B) J: _" s5 {程序发布需要.exe、bin\、.fig$ c8 z; W1 j: ?* k" ?2 `: u( I' b
8 _ q! I& j0 n4 a6 a0 h2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件0 t' r- T G( e
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
8 S* }$ t& J1 F" f; F! D另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
- t" e7 H9 s# C) T1 ]! T5 Z# }! E9 F0 j
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布1 o& N; J6 R! i8 }. f5 h
以下通过注册表自动添加path路径
, T2 A/ S4 o1 T( P9 z) _. J%————————————————————————————–
A5 |- X9 p* L$ }$ z7 bScreen.Next(); — 进入下一个屏幕6 a# M8 S& I) M8 ?) N
resultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
+ T: r/ _! H) I) mif (resultDialog == IDYES) then –加入安装路径
1 |0 X, W" ]- I: L$ s- ?strPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);) A- b2 M4 n! t! O ?/ [& H
if strPath ~= “” then
: B: S1 g% R+ p% Q6 H( Z& u2 | strPath = String.Concat(strPath, “;”);
, }# Z6 l1 v( Zend$ Y, J8 X4 j. |7 k2 T1 H, D% Q; i2 N: h
strPathToAdd = SessionVar.Expand(“%AppFolder%”);
7 L" E" A! V7 }' j$ W" ?strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);+ E* q/ J2 n6 ]8 ?$ g6 ~
— 如果路径中无该位置,则加入
9 ?: U+ p+ }/ E; [& lif String.Find(strPath,strPathToAdd) == -1 then
& L/ p+ I) D/ U1 j$ l strPath = String.Concat(strPath, strPathToAdd);
6 K- B* _6 Q- n' [ Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);# h$ J" M# i" v: ?
end
& T f+ o p5 U. ]1 W1 i# Lend, W- x! y. ]0 {8 ?9 {
%————————————————————————————–
2 s* g/ ` o1 }1 ^8 |方法三:
: }& C: O6 R! r& G" e8 S2 T* }" X在网上搜了一个方法,还没有用过, 贴在这里仅供参考:+ ^4 ]# x% U. {
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
1 @# q9 c- d9 Z/ C$ W4 j4 x" U* r首先,使用mcc编译得到.exe文件,具体参数见帮助文件;8 A' d$ N% d4 }1 H# C
其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
g8 D) K) A5 G# A0 W/ R4 l! y# x第三,在MATLAB环境,执行命令5 | e3 W: p) U) I4 s2 m! { [
mcc -m -B sgl file.m
' v r- r, [/ \! `9 L% T/ Z; }或者 mcc -p -B sglcpp file.m, B' G* r* t# [4 f6 k' l/ g& Q
请键入help mcc看帮助。 Y9 j4 t& V0 L! s
mcc是在“command windows” 用的吗?
$ F. [$ O* x/ \! S! ^( m只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.
9 i# s2 v' i# T! c还有“添加环境变量path”是path到.exe文件的环境中是吧?3 d) V+ ^# v/ I- f; {% s) [! T
$ M" y% E& D8 T* O! D! V
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装
! A2 A7 e$ V$ B( G+ ?# t1 t三、 如何将gui生成exe ?
! `/ ~2 L: |2 m* I已有gui.m文件和gui.fig文件/ V, `* c2 z' t! s% U% [, V) D
1 在matlab的command窗口中输入
2 ^5 ~! k- Q. |) b! X: I' kmcc -B sgl GUI.m$ H. A$ ^# p" g# q$ g" e& v
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器3 S) t( p, L! }- n
此时仍需matlab所必需的动态连接库。
2 R5 W0 }0 V. I! h; v8 N3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上
6 Y% s7 E9 |7 b. Y1 B. @" q6 h7 G5 [4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。% {) {1 V$ l( z+ D/ x' b
5.大功告成。 & v; J% y, e9 U, q M
' w1 j+ [3 J( K. I% _
外一篇:MATLAB M文件变exe文件3 f' k- g( e$ E3 D$ _/ r
我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序5 Q1 A+ e: P0 R/ f
希望这些对你有用2 z/ Q5 m4 y$ b
4 \/ R4 d$ N {4 G+ n' G* C
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:6 l3 L9 v) c7 f/ _
# s7 {8 ^' w. C1 E一、生成独立可执行的程序(exe文件)步骤
' m: a8 S$ }4 C3 I! K% v' H* P6 s; n5 L4 H
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
- m1 x" |- I3 Q& Z M2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。& R5 R' V, x# t4 m
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。) _6 o# O3 V( M. g& |) S4 Q/ t# Q- i
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;. ]( t' r8 V( O3 b
注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
1 ], Z8 v Q2 `4 b! x4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
4 a% V3 w; T6 W) h
. x- ] {0 u9 O. e二、脱离matlab运行可执行程序 A- Q5 G( q' t0 b$ d5 L
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:$ z5 `7 e# Y3 r0 j) W9 K9 h1 y
\toolbox\compiler\deploy\win32
& T" r2 {! m* T& ~文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
% P' Q8 [! n0 L1 o在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。
. X4 E; K8 _' y2 i1 c在其它没有安装matlab的机器上运行exe文件前:* L3 z$ J% W7 \! F1 j& U9 B. r$ d6 ?
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。6 H- U; p @: H3 d
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。3 D8 ~/ m) r* [7 e: K
如果没有,也可手动安装,添加的方法是:8 e: A( H0 y5 Z3 j* E
右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
/ {) g6 x. q, R- W+ i* A注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
- p" `. {. R' ?$ d8 O3 g7 U最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
+ P: f1 c' U; T1 _; X! v0 g问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。
. \% n1 ~0 V9 C4 a6 l* G美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:5 n' V4 ~0 C* o, `( ]$ Z
* p; ] U5 M4 l' G j/ J3 `
消除运行MATLAB生成的exe程序的dos黑屏的办法: L* c7 `. T) [* J' f1 O
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:, a+ U% @8 `4 \; U% _1 T N/ G
方法一: 在命令窗口输入:- A: ?9 U1 e0 ^8 b/ ^, o4 k! C% t" |
cd(prefdir)9 i. f: N+ {& M' q. f i& [& d
edit compopts.bat. r9 n. t' B0 Q, c, Y( J
在打开的文件最后添加以下语句:
* h# J" R, H4 N. u' d/ i% Z& W4 V* L4 u, L; v
A.VC环境下:
3 O0 F! g1 Z& e3 E( W
3 Z' l! p' H6 w) p: r. \set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup 2 }( I% C4 ^9 D; E, E- n
# l1 D$ r' j; h# F% ZB.LCC环境下:; Z, O0 p0 j4 k/ y* ~; m) c
set LINKFLAGS=%LINKFLAGS% -subsystemwindows
2 B1 ^* Y3 {1 E( _
2 P5 y; E3 V5 A0 f9 |' L7 LC. Borland:2 I3 Z/ x4 w: Z3 v, y) t# s5 R W
set LINKFLAGS=%LINKFLAGS% -aa, |: h" A" ?4 u% m; i7 T! H
$ M: p3 B, b" d5 Y Y保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了4 D1 n4 q+ w& H" V% d
2 X% e9 K5 S, _! C& K
方法二:使用suppress工具:% i0 v7 y: {9 E6 O) g
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。; I' k- R5 R1 O z
3 q# B9 \5 C" D1 K3 W, A* D9 F其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。: V J3 W9 f: h+ w2 V' e
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。: v8 D2 g8 y/ {; b/ F
|