matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:
* s4 J4 Z3 _$ V3 m8 P
; q" }# j6 K: _* J/ |# @. n& V& I1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
% \# [7 p6 Y, C) } `1 {1 bMatlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。) d; y l/ e6 s) X8 K, k2 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
! b1 r/ s6 z$ [$ p* E, h6 Rlibmat.lib4 \; J% @( ?1 B8 ^2 p. g+ Z: {) E3 z
libmex.lib
1 ~# x6 d# B# `+ \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"。 ( _( Q/ }4 g; Y" P1 _
/ }1 e7 k. k% ?. U* ?% \1 O" C4 z |0 e
1.设置编译器:) D6 D8 R" n6 `1 i; m; R
在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
2 v8 t" {) C- X5 @3 t3 s' VMbuild –setup, 按提示选择matlab自带编译器LCC。, S+ |1 d. B+ v; s$ X! b
) o' s/ G2 i/ l0 U/ Q* U2.将脚本编译为可执行文件:
$ F8 C" ]2 v4 m8 @: `. U' H如项目文件包含:gui.m, gui.gif, fun1.m。
. w* F& F0 G. z
6 [4 T1 M; R) z. Z1 B/ ?# |' Y$ d) L0 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环境运行必需的文件。
: k, K2 q0 q* v" t' f! z' Y% }1 o4 v6 x1 W5 G4 A
3.在未安装matlab的机器上运行可执行程序。; e3 U4 V1 v" G5 U; a7 s
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。
1 s6 f* |" V! `" l: \将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
) `0 w( R# r3 u$ `
2 D! b. p/ y& c$ K% b' a* O6 n3 k4.去除独立可执行程序运行时的“DOS黑窗口”。0 i; E' {# N% g
以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。9 a. s% C/ `! Y/ B
: A) L* W; A9 ^$ B. x
matlba命令行输入:
5 H& T) a3 l, G) h/ K# G2 c# q
# u+ d f+ c! k. {' R7 r* tcd(prefdir)( V* d9 L0 \4 t+ i; n9 D: h" A
edit compopts.bat
' ~$ T6 M' p2 |0 U, M1 z8 K" B6 N& s* ]- g9 T
此时compopts.bat打开,在文件最后添加:4 G& l s. ~8 _) A7 [
/ K0 S+ U4 L: z: m9 g1 h
set LINKFLAGS=%LINKFLAGS% -subsystem windows
- N2 N; v) u5 A8 [1 r$ ]& @1 D' h& C$ a. b; \! |' |
如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。7 M$ ^) J1 E4 r9 }
. }! F1 M# \6 h2 I, ~) F$ C5 {7 v另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
7 O$ E6 K2 m' i9 m' }/ Z
5 n2 v. J1 p4 J, G4 f$ RMicrosoft Visual C/C++:, L0 G; H# \- s$ B7 L$ Z
4 m. x N C: q1 W8 e- j; D
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup; |: ^. d% @ }) H% \2 I3 D# Y: N6 J
9 v# f! O9 @$ [% O9 FBorland:
; b0 f# S& R- m1 K6 ?9 F4 e' h* A' X7 l1 U9 o; r; q
set LINKFLAGS=%LINKFLAGS% -aa* ]5 F# S: Z% w7 _6 q' N1 b& U
———————————————————————————————————————–' z& A# ~; l0 Z' y
( \$ N. b1 X$ H; X' F/ ?2 H$ V% N方法一:5 V" i8 h" r3 T/ }5 x6 _9 {
已有gui.m文件和gui.fig文件/ x( M7 F: W' \2 L8 n: u, h
1 在matlab的command窗口中输入
3 [( I6 g: ^! R8 j9 o5 Tmcc -B sgl GUI.m( X0 h0 g, x( O. v- o
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器6 j6 R) F; c0 y- F- e/ z& ?& e
$ G( b5 [9 s* w6 [) s$ W
此时仍需matlab所必需的动态连接库。. d3 K" y7 ]/ ?7 U }
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上 f# b. p3 u) n, I4 s
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,) l5 @8 M9 z* ~2 c$ U9 I! ?! d
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共( |+ v s; U1 ?- y+ Q: Y
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
. R l8 \. {0 y( P: J* ?而toolbox目录则必须与应用程序同一目录。
5 ]3 ]: ?4 p$ [: M
7 \7 Z" {9 z$ J$ s方法二:
" _) r/ ]* Q7 m& A |
! H3 q6 A! D9 F- a8 D9 O9 l# a) ematlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。9 e' s' C9 w' g1 F+ Y2 P# o
' Z9 w( B) k4 f+ l) m8 H9 C1. 转化为c/c++程序并编译为.exe$ ^' y: o! T. V1 K* y
先验证mcc是否可用,用matlab中的example验证即可* M% L! A( c6 H o
建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
0 q' l q! z$ s+ t) L- s由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
/ m8 _ e8 Q% f2 z" m编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等0 i% z# R5 X2 k2 T
程序发布需要.exe、bin\、.fig! j! r5 |. U/ Q3 Z/ Y1 _8 V* ?6 E. ?
$ m( `' d. m. f [
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件
5 Q! i' j# C D: c' {6 `( u0 Y0 ~5 m前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径, D& |- B, Z6 N, I" _7 _8 I
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
$ v% E5 a8 g% t1 ?! i
% t0 N. Q# q- Q+ Z3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布& D; V: _0 q# d& g5 j& l" v
以下通过注册表自动添加path路径$ c4 S: J2 Y8 p* [: H3 ~) N B
%————————————————————————————–' G* ] N- p" |6 f
Screen.Next(); — 进入下一个屏幕* t1 d9 O: t3 V* ]
resultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
; Y0 \5 f$ U2 Oif (resultDialog == IDYES) then –加入安装路径& g8 ?; l0 p! D
strPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);+ h4 Y% \. u4 O! n$ Q: w1 b7 O' V
if strPath ~= “” then
$ D Z6 K. y4 F# Y6 m3 C strPath = String.Concat(strPath, “;”);( v% e# ^+ L) n" r9 p9 m6 f& b
end! F! _) _, s. g; s( U
strPathToAdd = SessionVar.Expand(“%AppFolder%”);
Z& {7 Q7 k7 X- L; ~strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);
/ K. ^0 S6 a7 z2 d( }! q- r— 如果路径中无该位置,则加入
3 C2 i6 @+ C9 a+ M6 k9 [! Iif String.Find(strPath,strPathToAdd) == -1 then( n+ | F# y2 q5 b
strPath = String.Concat(strPath, strPathToAdd);9 ~! W0 b0 v8 D, }
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
' w6 T' k d) F" _5 B6 q2 r5 Q end% N k9 `$ W5 ~/ m
end
" ^; Y- ^. e4 H3 q( i% Q# l%————————————————————————————–
+ e0 I, h. |& v% @2 L方法三:
& H3 A C- l. A, u# L' y$ }+ X在网上搜了一个方法,还没有用过, 贴在这里仅供参考:
* u, \( c: U1 f1 {* q; U一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
( L( o; U3 }" ~* K6 c首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
5 w& V& [! ]; K5 l7 W其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
4 D9 F: b% N; R9 D% l; _- K7 h- [4 a第三,在MATLAB环境,执行命令
! y! d. [; f Y& d& L0 m* ~6 vmcc -m -B sgl file.m$ d" l: a4 G& C6 {+ @+ B# O
或者 mcc -p -B sglcpp file.m
* {6 q7 Q c& b( c请键入help mcc看帮助。) W& n; g. o# S Q! S% V. q
mcc是在“command windows” 用的吗?$ G( s! {7 E3 X9 t
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗." H% _; `9 n. _: h& p3 A
还有“添加环境变量path”是path到.exe文件的环境中是吧?
' s0 F+ E) i# ^- n
* [7 c, y8 f4 f1 J4 U, [* @7 [二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装
# |* ?% F+ f/ b三、 如何将gui生成exe ?
$ j) P: Q Q. `& X5 e- c9 |已有gui.m文件和gui.fig文件
4 M6 S# }& I- ~: [# d" b: f. Z1 在matlab的command窗口中输入2 _% Q1 K" q7 B' J- V- {5 I
mcc -B sgl GUI.m
( ] c% |! R n" F8 q4 [7 f2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
% H$ }3 i0 N* ]$ |+ ]) X此时仍需matlab所必需的动态连接库。; ]+ k, ^, E. u; ~3 ]
3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上5 m% A& K& f0 K! _1 p
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
- v5 x k( g. g/ ?! i4 u5.大功告成。 ' I6 o5 M6 k& q) I$ C8 N
* B7 h0 ~& i/ I& p, p' ^) G0 P外一篇:MATLAB M文件变exe文件9 c" z6 e2 K, D7 j: O7 [+ s! C8 y
我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序1 I+ V2 N# [; X/ i/ U7 J! L
希望这些对你有用
6 N& b+ I# N6 H6 b9 y/ x( W
3 {( F$ H6 M0 h2 ]& ~如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:* l* N! i9 x* I6 C8 n D. x
# T) X; f7 M. ]! _" I5 \
一、生成独立可执行的程序(exe文件)步骤
: }# Y; \9 @$ n `' k% F( s' X1 z' G# v0 L/ W; r( v
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
# R6 ]' [& r0 S! ]1 ~2 _2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
, x& R% A& D( a {7 K7 j. D2 l1 L& v3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
' e# _0 d0 b6 x/ J: f当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;2 B3 t) E* n0 |0 L0 n8 K# S! W
注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
! @# [5 @* j) I3 X4 Q4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。# z" H0 j% U- i( E% V5 y7 Z
$ C% _; H. u( i3 H二、脱离matlab运行可执行程序# ]6 N+ `) [9 n
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:' Q1 F& {' Y* B* i1 {3 j
\toolbox\compiler\deploy\win32
( T3 [' j$ Z" z, c% }8 T: u( n- T文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
5 y9 F$ F+ u8 H在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。6 Y5 S5 l" H" {& C
在其它没有安装matlab的机器上运行exe文件前:
2 l9 i% E5 f; Q3 [首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
7 { {9 i) ~$ b1 w G) n% \& r其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。
& N9 Q; t5 Y$ n m如果没有,也可手动安装,添加的方法是:
% S- M1 c O& @% v! ~. j5 I4 x# E右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。& ]: m" h! d$ \! @
注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
& h/ a9 F2 K0 D0 `) o3 M3 b# W最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。" ` d$ s: C% ?. z) A5 h6 }
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。
i+ e- o0 \- C/ d美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:: w7 `1 }! \+ @, V, W- _
/ E- K3 i ~. o9 H% k2 |+ b消除运行MATLAB生成的exe程序的dos黑屏的办法" @4 |% q; Y5 @" a, ?! o6 c0 Q% z
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:" h- p+ L- S1 z, j. g. X
方法一: 在命令窗口输入:8 M2 `7 {2 W8 Z/ s5 F3 a8 Q4 K
cd(prefdir)5 o/ c' w0 s, p4 i( ~: e+ }
edit compopts.bat; w; q; J. a+ X4 [5 N3 u) C; {5 H1 V
在打开的文件最后添加以下语句:8 O. v' N' R; H9 F. q
3 S* u" I# h. h* w" B" ZA.VC环境下:
4 Y2 s6 B+ o7 J# i1 f8 ^. n/ T; |9 Y% H: j2 b y1 s5 o4 Z
set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
! _2 L- f$ w0 F$ q( e, o1 T
7 H8 v% _/ p, D d) j% V+ P/ \2 w6 R" G, RB.LCC环境下:
# S7 N% ~, _* Y+ `( [5 d' ?set LINKFLAGS=%LINKFLAGS% -subsystemwindows
! @& ~( O+ O4 l' \0 v) B% G
* f7 \0 i6 C! h l7 E' EC. Borland:6 Q3 w4 d+ s* [+ z, P! N- v0 \6 H8 q
set LINKFLAGS=%LINKFLAGS% -aa9 J# l; d; |- d8 h
4 K: K7 j" b2 G4 P+ m7 C
保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
. y9 L" I0 z9 Q; V C3 x/ E' I% r" \# {) T* c3 I2 u2 j' a
方法二:使用suppress工具:- c4 _2 d3 M: j# }- j
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
3 |, X6 x7 ~% g, B
& P4 r8 e* r4 N* r; {2 W7 q其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。: G" D* I) u* q% E
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。3 s4 j2 X/ H" D9 @
|