matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:( g$ c6 K& F5 d0 K
4 Y8 D/ j! c. P2 d" D3 {2 {0 w, O3 L
1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
. ?, @. E$ ] }" D% g7 KMatlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。 s5 _8 h) e8 L$ K7 w: f j
虽然生成的可执行程序可以脱离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. e* K/ ^ d; H% V" v5 [' o |6 C
libmat.lib
/ X9 D! [9 P: x) l0 slibmex.lib
6 k: V& f ^* a- E# R7 W8 c2 k& Ylibmx.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"。 2 d) C7 u* j: R% T: ?: Y
/ \8 \$ q/ n$ F6 P8 S1.设置编译器:
! s8 j; e: w) t9 H在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:5 H6 |6 U$ p4 H8 B6 r
Mbuild –setup, 按提示选择matlab自带编译器LCC。
9 `9 w$ h2 T2 B2 L
$ Y, O( R" e$ o1 R& Q1 c2.将脚本编译为可执行文件:
/ q( D r6 U2 n% i1 m" R: s! @如项目文件包含:gui.m, gui.gif, fun1.m。4 X5 l: @- Y9 u: D; e
6 `0 ]/ r( X7 z+ w在此路径下命令行输入: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环境运行必需的文件。& E1 @ ~3 ~2 [8 _* y+ ^+ _5 I
+ b3 J2 H% o# R# m% f. b, z3.在未安装matlab的机器上运行可执行程序。
& a/ u3 \( k2 M4 N将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。
4 f" g8 T- K4 k将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。5 V% V; Z0 _. p. \0 u
4 }$ h1 S; M6 w" L4.去除独立可执行程序运行时的“DOS黑窗口”。
8 X( j0 M$ s+ ^& j& I; I以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
) C9 \6 t( d; P$ N
. \* T9 c- Q0 h$ ~/ ^: Jmatlba命令行输入:& X$ w. L# u) |8 s$ E
# W. ^1 S, D# Z- x6 `% ^' o# E
cd(prefdir)+ S! i! H9 Y: q6 F% e! p* S( R. e
edit compopts.bat. y8 E- y7 }+ x' F3 v- N
6 d- K% i4 }* M( G: j$ [8 {此时compopts.bat打开,在文件最后添加:
! V; a8 r; i1 H6 N, q0 X( `) ]% J" q% {1 E, S
set LINKFLAGS=%LINKFLAGS% -subsystem windows
: {) ?# C% U2 s- N( h
, Y2 I4 s4 s- w/ ]5 d9 f* L如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。
& t* @) L* e4 G2 J9 w [/ Q0 d$ v4 B7 n4 U$ Q# f* L
另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
; h7 j& t: d2 ~5 }# j" m( @
7 O/ q7 w7 Y! v7 l" T/ \Microsoft Visual C/C++:
# V2 j! E5 F& y p" r) T, X7 d2 S4 Z# G1 q) J- }- q, v7 F+ I
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup0 _+ ]" Y" K2 E+ h
1 [. @$ Q$ v) [: X* M
Borland:4 {* u! p; h% E: j5 T4 z+ e
`8 n& C% T v9 a& `" aset LINKFLAGS=%LINKFLAGS% -aa
/ G# t' C, d! s' e1 i/ B4 ~; ]———————————————————————————————————————–- K% V# U, n5 a8 V2 \$ L
5 N6 O; ]# A0 x x- _
方法一:+ ^: @/ L8 M' m% _ v
已有gui.m文件和gui.fig文件
# S( Y& V6 ?( v+ @1 在matlab的command窗口中输入* j F! S2 J* M% J% f
mcc -B sgl GUI.m6 C& N% i! P4 L
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器6 { l3 J: M7 N* X4 B; I
" E8 z5 n0 c6 j) v7 T) V& P4 B" ]$ d8 w
此时仍需matlab所必需的动态连接库。, ^% T2 Z0 \* `) n2 y( r9 X
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
: t/ b% d3 ~0 e3 d5 F' Z) q4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,# h8 T$ n+ X) U! W
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共
" v& Y1 W b! E7 b, I$ ]& r9 @有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
* l$ @( f6 _8 \- J8 ]; A, B而toolbox目录则必须与应用程序同一目录。
- X' l( [" W) v# V
! Z$ j# Z7 ]: i0 G方法二:6 \+ j4 Y. A8 K
( X5 m8 A2 y4 V
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
/ T a+ p! A/ w& } R% j9 e% @) e; Z* b) `
1. 转化为c/c++程序并编译为.exe
+ w8 m" a+ r }2 ~5 g先验证mcc是否可用,用matlab中的example验证即可
; B% x2 V& d6 G% y( a0 N建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
' q' _5 d. r0 }! r. V由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure% k7 n4 A; g5 p9 x
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等
8 q$ _6 V1 y* Z6 N程序发布需要.exe、bin\、.fig
7 u7 p" r$ B: i" i7 u" Q9 e. o. p4 W( R R$ K/ W
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件
9 k( W. E. C! p5 {# q0 k6 T前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径4 e+ V( f/ I2 V4 L$ A, g
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同5 R( d' {( v: ]' a9 d/ i0 r
4 j/ g) C! T2 [3 l
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
+ b3 S6 @) p/ J以下通过注册表自动添加path路径- m- e. w+ R2 `4 M ^+ f2 {5 D
%————————————————————————————–% o8 K: T& C b
Screen.Next(); — 进入下一个屏幕6 X& A# D$ Q% {" v" J a( B
resultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);6 s" M/ W/ _6 h! B
if (resultDialog == IDYES) then –加入安装路径
, n+ H7 P: R6 ^3 y& OstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);
, o% \- I4 g% R0 @! J4 s; e& W if strPath ~= “” then& F! d, ?4 U' U% k* B
strPath = String.Concat(strPath, “;”);
8 u9 @4 V" t8 k! J/ i4 xend
4 \( _$ O; t3 I7 b strPathToAdd = SessionVar.Expand(“%AppFolder%”); ~7 h2 a& y! C+ O' V
strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);& d2 H( ?3 ?5 k
— 如果路径中无该位置,则加入
$ Q: R$ `. r2 c5 i1 j) Pif String.Find(strPath,strPathToAdd) == -1 then
3 V9 X' s7 S; X: n- T strPath = String.Concat(strPath, strPathToAdd);6 n* G& a' i& ^* K. k8 Y
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);: v9 J6 F1 ~% x" ~$ B
end
; X/ F9 M3 V# A6 n& ?9 Lend
: U! G, x7 V, c j5 I%————————————————————————————–. q, y' Z" J `; l" _" C; W
方法三:
" z' A- l2 E# e7 X1 |在网上搜了一个方法,还没有用过, 贴在这里仅供参考:
4 H! n) c+ G0 \. j' O7 l* D一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
9 W1 F% C0 ~; p& g首先,使用mcc编译得到.exe文件,具体参数见帮助文件;$ Z" K! X0 n% [! Y
其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
! J, Q4 |$ I( V, I: M第三,在MATLAB环境,执行命令
. ^$ G% _5 `. G4 T) }& }mcc -m -B sgl file.m# n+ X, k1 [. v
或者 mcc -p -B sglcpp file.m/ \% d4 p1 ?0 [% C \- z! Q
请键入help mcc看帮助。1 V$ F+ w! b8 ~/ l- c! I
mcc是在“command windows” 用的吗?
% A" t& a8 w9 ^3 w只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗." w6 r5 b( |0 a
还有“添加环境变量path”是path到.exe文件的环境中是吧?$ q+ }2 x: Z7 `) h- s# |
6 j' [. B& v" K; s+ S" ~二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装$ C6 W# k, p8 U8 c7 D Q
三、 如何将gui生成exe ?
, f: a2 u; u5 Z已有gui.m文件和gui.fig文件; Q+ S4 L- E' f/ V6 p5 ~
1 在matlab的command窗口中输入
0 U3 ^8 b, k( V' p- W. _1 p, r+ s( |mcc -B sgl GUI.m# B4 r9 {! y* F5 u( D- v7 ]
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器; ]# U- A- d3 K# o) f3 l* Q! g
此时仍需matlab所必需的动态连接库。4 c- ]% X! I% P) B( Q
3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上
; H9 S4 [: L u9 m4 b( a( f4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。/ y. Z# J1 l8 ~1 G9 F
5.大功告成。
4 l9 Z$ ^: c# `0 S' W9 T6 d; x, X! o6 s0 s" t% T5 R8 ]: K
外一篇:MATLAB M文件变exe文件
% K q3 p( ]; ~2 b. d+ Y我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序
% p) B* a, j- E4 V' m% t6 [% W希望这些对你有用* O* s$ R) n6 o0 M
0 q; X4 ]2 O: Y" w% ]* u, P
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:- W& z) _1 u" p$ p9 r" I5 d/ [
( k: x* u' U- y8 f8 w7 L& @一、生成独立可执行的程序(exe文件)步骤
) ?8 N$ N: s7 M# h$ O
/ R. @! r/ z8 j1 X1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。 ^( B0 L( ~' y1 E! ~
2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
1 L/ E. t. \8 }: \, x0 p6 A3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。( d+ k: d- {; z! Z' x6 Q
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;3 L- T8 {: [) g) S/ o
注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
3 k/ z9 r) k/ P2 p- Y4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
6 a* i) W- \2 ?0 }- u# Z c! |# D; ~( |; T6 m* ^
二、脱离matlab运行可执行程序0 X) l$ v5 A* X3 v/ [
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
7 s% \7 P) z- m \toolbox\compiler\deploy\win32; A7 Z: ~% B% t/ I
文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
4 u2 o" `9 H0 p9 z" G在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。
% |* k9 d7 o6 j在其它没有安装matlab的机器上运行exe文件前:- w3 v# ~5 O4 p/ O6 c* A
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
8 e7 R) _, t5 P- C+ G$ b2 E* v其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。' V1 N( C: x g0 ]0 q$ [$ v
如果没有,也可手动安装,添加的方法是:
/ ]# v6 E) b; j) k' E1 T- o3 J右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
: T3 ]# ?/ Z3 O9 S+ E* w注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。! A* B0 n; _9 X8 |- D* w' m
最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
* j" K- {/ e% H% \" p; ]0 m问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。3 M5 c5 o( T. X5 m" Q
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
L. F! G2 H: J$ C. [& H0 |/ \- U3 s9 J% Z K' D
消除运行MATLAB生成的exe程序的dos黑屏的办法
% L1 S* `. A- V3 c" W T# Q" z2 b基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:
$ X/ i, l) g- X$ _* |6 _" D( U方法一: 在命令窗口输入:
; Q2 [ n, G8 T# |; ^# z' _cd(prefdir)- M' y: Z3 H4 h, v* E
edit compopts.bat
$ C- Y: Q, _ |& X9 U在打开的文件最后添加以下语句:4 d6 Q% P6 {# L
- Y* J( C1 `! Y$ I9 j: B( I- WA.VC环境下:
+ p& O) b/ B) V8 S) R$ r7 o/ S
% O, p5 b( }! Rset LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
- z! r5 T: k2 U" e0 w( Y4 W b4 ^" m/ Y; B0 a: J8 X5 b# X! g4 ^
B.LCC环境下:
: @/ a) ]: i- a( _- D! P% hset LINKFLAGS=%LINKFLAGS% -subsystemwindows - o7 a5 Z' p4 z
9 @. m" \( O4 V8 n/ F$ D) jC. Borland:7 ~" e0 m9 Z! T# z0 V) B
set LINKFLAGS=%LINKFLAGS% -aa2 E: H3 r1 k7 { q. G# Z: R
1 t x) B( d# m. M, i2 Z+ C保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了1 K$ N* m5 l1 o! h. z) w- n5 {
" a- M v- j+ ^ v
方法二:使用suppress工具:
3 y" |/ }- ]9 ^$ D: E( c7 ?3 `下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。9 K) G) U% E/ ` L5 ]9 p
* H7 @! E. d/ R; U# A1 I; B其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。7 q7 L& [% o/ O, l( {8 ]
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
3 ^( T; ^# J4 O: `9 W( @ |