matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:
3 b$ _: S5 c) g
, O1 A7 `/ H8 G4 c- M) }1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。! U6 m G |: p; p6 J0 f
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
: h1 d" f+ I! C' R& R9 A虽然生成的可执行程序可以脱离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.lib3 e) `( n, w7 q- j* e
libmat.lib7 Q8 w5 j, y, s! Q/ [
libmex.lib
% U5 k9 Q/ l" | Z" flibmx.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"。
9 m. h* U% K T* s 2 M0 F" V5 j! T2 i1 a7 J
1.设置编译器:: c7 W1 b4 X* v* b: q0 @
在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
$ C3 m$ ]4 c4 e qMbuild –setup, 按提示选择matlab自带编译器LCC。
) h, \9 @* Y4 R$ E
- T' O: r( R2 d+ |: v3 U( T: |2.将脚本编译为可执行文件:
# w) }# S: T7 P: b6 Q如项目文件包含:gui.m, gui.gif, fun1.m。% R1 f S* | T3 [
) B+ b6 S4 g9 C" N0 x5 i+ t2 ~
在此路径下命令行输入: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环境运行必需的文件。
{9 v' { Q( b* L
0 y/ [/ X z1 B. X: T) @0 i0 r) z3.在未安装matlab的机器上运行可执行程序。% P8 o( G% u- l+ m( e" J
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。1 ^9 I) ~, W2 G0 s' p) O
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
- u+ B: e" S0 n4 I
: j0 c* T3 F3 J s2 F, d+ g4.去除独立可执行程序运行时的“DOS黑窗口”。
& b9 u: Y" C5 g6 @" X4 B4 z以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。+ G Y6 I% I% q8 `4 k% G
! P, y' p+ i9 w# F3 Y6 k+ m; Y. ematlba命令行输入:
6 O `5 }9 p/ i }4 ?9 W8 k$ c; Z& f* I
cd(prefdir)" q) Y! v6 O9 P: ^3 {
edit compopts.bat5 k1 y% R/ C1 J0 n
# d1 b+ E" f5 u" f" j6 F9 t" ]2 b
此时compopts.bat打开,在文件最后添加:
9 B0 ]6 m" I$ G0 n- {" D7 W
8 B0 x; p Q- t& V; u' b7 N( Aset LINKFLAGS=%LINKFLAGS% -subsystem windows0 o5 Q9 P1 d" O) @1 e+ H, \& H
0 w$ x& @6 j) ?" F: q9 ~如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。 T3 {& r- W2 O$ w) i: s2 t p
f2 s$ F; ^* y, R0 @5 I+ p H' B另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
. X% @2 y7 i1 g; r u9 I, R" z% {+ a; c) `
Microsoft Visual C/C++:
4 |8 h/ _9 t! W) w: z
# ?! m$ \, ^5 n: g- dset LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
; N2 d2 \9 |& A) T1 }" z
. ?8 D" r# l- F, M) x3 C) zBorland:4 |5 m) S! t1 Z4 B. b( t) |
1 G& i/ g, e/ y7 c4 ^" |3 zset LINKFLAGS=%LINKFLAGS% -aa) U" l) y1 w: z9 \( t8 x
———————————————————————————————————————–# I$ ]0 S. T- v [: C7 q
" s5 G% a& e$ }方法一:
9 {7 x: f/ v: H# a4 J已有gui.m文件和gui.fig文件2 w9 ^: G+ f% N. i+ r) L. z
1 在matlab的command窗口中输入
# l' m" u6 T$ x5 v% L# q% K9 [mcc -B sgl GUI.m
h& ~- ]& P, B7 o U- J* ?2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
* J; E( o5 [1 i3 t% t+ |6 a' b% I+ W: k. \% J
此时仍需matlab所必需的动态连接库。2 ^ B8 I9 p. l* W
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
* \% ]3 a2 @& C5 x1 S, n' h+ D4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,5 ]7 z5 h+ c: G" R4 R5 \% a' ^
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共8 q$ R; h! G& Z y3 U0 n/ W1 Z. A
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
8 b u# E3 p( G8 V3 X: r而toolbox目录则必须与应用程序同一目录。
! F4 G' L/ `3 }4 ~
* M& W7 y6 t8 q$ X9 m* z% L方法二: H, }7 e- C/ O7 N6 C6 z
7 x4 ~1 I2 ?4 F' N# y7 }; c1 w0 s
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。& |# k$ p$ s# `/ i. P8 a5 B; g
6 g" }4 Y* W2 w1 ^" e& b1. 转化为c/c++程序并编译为.exe
1 q5 H z4 P K" }; \3 P2 p$ z先验证mcc是否可用,用matlab中的example验证即可
v% r5 H: C, e/ ?建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
' O) O' r O8 K8 C由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
5 A' ?4 [( h, T( G( u' T! ?9 w编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等
4 @8 ?9 c0 ~* O程序发布需要.exe、bin\、.fig7 l( H# l; Z$ Y+ ~: A
' a( ?4 k6 U8 V0 E2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件/ E2 m1 t8 L: W5 b
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
3 q8 {- O) L- h- k: T另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
9 y! A4 W1 y5 H+ L1 Q0 x; S# `5 N; l' [ B$ @
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
7 o+ U5 j/ @8 v, s- K以下通过注册表自动添加path路径
. S. v8 ^ W, c, ?%————————————————————————————–
* s0 y9 f' @$ q; W( oScreen.Next(); — 进入下一个屏幕' I. p% U4 ~) w# y+ i
resultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);0 R$ p9 X! T" |% d( S
if (resultDialog == IDYES) then –加入安装路径% ?3 Q; }9 V' B5 i; J: y. C
strPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);+ ?* Z) D7 S2 h; _3 G; b3 f! j
if strPath ~= “” then" ^, j: [$ o, c( \" f1 V9 E* Y
strPath = String.Concat(strPath, “;”);
8 G$ n) J# z, ?- [! T/ Zend3 m Z/ z( H6 {2 k( q
strPathToAdd = SessionVar.Expand(“%AppFolder%”);$ ~) A) R% X8 D) }
strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);# v1 M! m% L2 K
— 如果路径中无该位置,则加入7 l; X1 T5 g' }5 i; _9 c) v# i) g% j
if String.Find(strPath,strPathToAdd) == -1 then" k% |6 G- B& e* r' F! v9 Z( i
strPath = String.Concat(strPath, strPathToAdd);+ U7 X0 g4 }+ X/ F8 ], U9 g8 u$ A
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
& o3 ^( Y. h+ a7 ` end
1 O9 C7 x9 d: I8 N1 }- T# }6 L4 }end
S, ~1 v! }0 B' y5 M" b0 ~%————————————————————————————–3 Q0 s3 u+ T. h
方法三:2 \, c- s% W' H2 G% P: t
在网上搜了一个方法,还没有用过, 贴在这里仅供参考:* Q6 `" U6 d. K' Q( i, A# Y, `6 G/ D
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
' S* C+ i+ Z& |8 @# {+ g首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
: G# o8 [6 h0 S1 K, d( e7 B K b& S其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
: m) G- @" d. }- z2 ^8 x/ ~第三,在MATLAB环境,执行命令" f8 ]2 R& R6 n
mcc -m -B sgl file.m
6 B3 r9 ] Q. L$ [# c或者 mcc -p -B sglcpp file.m
1 u& d+ P) C6 a2 C& J请键入help mcc看帮助。+ _. U5 Q. d- ]# b# _4 ]" F! Y/ H' B
mcc是在“command windows” 用的吗?" p/ j3 Z: S, a$ ]" ]
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.6 c5 e p) a$ Y+ I8 ^# G- B
还有“添加环境变量path”是path到.exe文件的环境中是吧?
' c1 N7 L, g5 A* L8 A% V
3 E; u2 [. c2 _) Y' q1 H二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装
) R# E+ I5 v F3 v$ @三、 如何将gui生成exe ?
9 ?8 B. E5 ^* n& H已有gui.m文件和gui.fig文件8 p1 K1 J0 g7 g% E( L# ~
1 在matlab的command窗口中输入/ [( Y8 k* n* p2 Z* s
mcc -B sgl GUI.m& s, K" C6 L0 G S) B
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器6 u7 n3 }& o+ a6 o a n
此时仍需matlab所必需的动态连接库。
' x8 ]- l. m0 `6 R) |. C3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上
* A( D; y& R/ ]6 ]* j4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。7 t' X8 ? H0 h6 o* k1 w5 S" V
5.大功告成。 ) s) }9 x2 ~# V
. v1 Q8 x! M8 I! F T8 p. Z外一篇:MATLAB M文件变exe文件
! p) k5 j9 i2 P7 q我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序
7 R( r9 G- u0 T6 E! S8 m希望这些对你有用$ d/ h D6 W: {( C5 J+ [
4 L: k4 S/ q; V' u
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
0 f5 K+ w' R3 s5 t, q# @4 j2 q& L' P* n5 ~7 P9 Q7 X& |
一、生成独立可执行的程序(exe文件)步骤
+ }" G' P' l, E# T5 Y0 ]$ ^# K8 S# Y* V, K6 @7 w- K/ U
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。# X" y4 X1 Y% M7 Z
2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。: Z$ n0 Z% ?, {( D
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。. U" `& l5 G$ c+ J2 a
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
) k; O" |3 j! G9 u, B6 [6 l注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
4 ]' k$ l r% y" F$ U! ]4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。8 @, [, k! ]9 b4 i
% g/ E7 ?! u# z$ K1 {5 U二、脱离matlab运行可执行程序
% E! p$ M) r$ j. u5 uMCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:' K( K3 D( ^0 o, A( j
\toolbox\compiler\deploy\win32 W0 f5 s! P9 P; s
文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。3 i% B2 C4 n4 O. ?0 W2 A. w/ P
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。' }* r* D5 o0 i* r6 C: E- m$ @
在其它没有安装matlab的机器上运行exe文件前:
% t3 j) y. e* R1 d首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。; ?- z5 `1 U, G0 k
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。
, w+ O; t, o8 M+ v3 z: v- l如果没有,也可手动安装,添加的方法是:
' b0 ~% w6 r( `0 R* ~! z右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
) |% D" R5 I3 j- z0 g3 Z9 D( H注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
0 c9 J9 ~% k8 u1 S$ C& q最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。' ^, Q/ T- O0 N
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。* f: ^3 M; l/ k
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:0 T- f: n& D8 V+ m" K
2 N& K" V" f( `2 C消除运行MATLAB生成的exe程序的dos黑屏的办法$ A1 J% k* S& c
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:, P; `& A9 C3 W0 x! { k: |
方法一: 在命令窗口输入:& M, I; A- o Z% r+ k u4 b
cd(prefdir)) M- b6 P3 |. [' F q; P
edit compopts.bat
2 q. i& @& t- B& G, a8 r) w在打开的文件最后添加以下语句:
" X- G, k5 s4 c
! Y& Y4 P# Q1 O. p* ~# kA.VC环境下:
* ~9 \7 D P7 D6 R
& N" h5 [( Y0 n/ R7 {) j) F; Kset LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
+ }6 o! l, l6 G3 ]* u2 w2 V+ a+ r# b; M* R# \" a# h) B& A* ]
B.LCC环境下:
# h# L/ w5 n3 m+ ^& Y) T" R' Jset LINKFLAGS=%LINKFLAGS% -subsystemwindows : Q8 J# _' u9 n: x/ B$ \3 o
) s/ e/ w2 p6 `/ n2 m2 }" cC. Borland:
7 k5 _, F* O) {8 f8 e set LINKFLAGS=%LINKFLAGS% -aa
/ A, Z6 w# r7 o( `( B0 w
! Q' R+ c) y: E9 _* X保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
9 Y4 }) V) {$ m/ \" k p* X" |& [2 w" z$ d
方法二:使用suppress工具:9 e9 K% R2 I* B1 d5 e& e2 s0 P
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
# n" A% O# d' W" J$ H' s7 ^4 J. f
9 v7 ]& A, C/ E- J6 w& k5 ~0 N" e其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。
% {5 J1 p/ i- t4 G0 E L方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。# I, f+ d( ?0 n
|