matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:0 J$ x6 f$ R6 Z
% m' Q9 Q! v/ v3 E% B, `% j6 V1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。8 i, i& E2 B8 r; w, y% f
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
+ b. w' ~, t+ Z3 P# i! S% h: c虽然生成的可执行程序可以脱离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) Z" U: R) J/ D# r( {libmat.lib1 i$ @5 j+ }% D! {4 H$ q" c
libmex.lib- ~7 u7 \% _+ j3 [& X8 @
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"。
7 h2 L: ?! w9 B1 }. Q y/ u ; U0 ^/ I6 H3 I" ?0 h) O3 R5 T
1.设置编译器:
, S+ T/ h% {2 `2 @. K# @8 w0 q在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:5 Y% J3 F5 C& k# y' @, Y7 W t0 n
Mbuild –setup, 按提示选择matlab自带编译器LCC。
4 m! S8 F, h: l5 _2 ]4 o
' {# [* ?1 w( w9 J/ m; v8 J2.将脚本编译为可执行文件:
* [; m& q' |9 e+ h/ J3 d8 B如项目文件包含:gui.m, gui.gif, fun1.m。6 T" \* T0 p) H& K, W$ A3 U7 p6 q
7 L' \9 ` `& l4 A' N
在此路径下命令行输入: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环境运行必需的文件。
2 E. z! L8 F6 e
) u( I/ E F$ F& Z& q3.在未安装matlab的机器上运行可执行程序。
9 \" u _+ i- Y7 _将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。3 ?- ^; Y" m& e% U& H4 E
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
5 d" b( S* F# M/ L$ s! P8 n
5 ?/ W# M# w0 S+ {5 \4.去除独立可执行程序运行时的“DOS黑窗口”。
~$ S4 \ F% F( t以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
8 f, g2 o9 E; u4 [ q
& X0 B# v4 m- Y; l Y2 }0 [0 Qmatlba命令行输入:
. Z% ]& f1 l' _& ^, P1 n, s/ `, [% }- i @4 `
cd(prefdir)
" o0 a% m6 C3 xedit compopts.bat
# \8 _$ F3 z, N, u
0 X" d' g" i" U5 b/ K此时compopts.bat打开,在文件最后添加:5 ?) t9 m- b! h# M# F
9 ~ x6 z2 h; N+ A7 m. Aset LINKFLAGS=%LINKFLAGS% -subsystem windows
1 ]* y0 q$ q6 Y! E- M9 {: b
5 U8 d* M* }8 g6 J, {+ m7 |如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。
- K2 O7 E' J8 @: G/ K9 P8 A
2 }3 ^+ m/ h! U- o4 a$ A- p另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
- P" \5 f4 q; f a+ k5 ~
# b6 P# L8 H% FMicrosoft Visual C/C++:/ h$ o" z6 C1 n2 D/ [9 P- V0 ?8 O
' p' f( r! P. i' d3 I1 K2 f h: R% ^set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup! M% |: A$ i5 L
* _8 d; I& U$ f; @6 x7 F4 F; @) ]Borland:
9 Y+ q4 A4 H4 H5 X4 y! U: }3 D3 g& l) ~6 W$ @" |+ r
set LINKFLAGS=%LINKFLAGS% -aa
9 L; M% W1 d# W———————————————————————————————————————–; r; c" t; n! m: ?
" @$ S; ~4 D9 v
方法一:
( V. X( H% @8 a5 x- _已有gui.m文件和gui.fig文件+ _- x% b$ A2 [: g
1 在matlab的command窗口中输入# F! ^ Q2 i, z
mcc -B sgl GUI.m
3 V, O* d5 S# Z7 S& ]" _% Y2 _8 j2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器- i* E; C# x; P: ^
2 Q! |+ F% Y% X5 s6 J+ m+ B
此时仍需matlab所必需的动态连接库。% u9 R; `6 U) r# z6 b% Z
3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上- P, e. S& L* ^
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,7 M1 F9 W2 ~! [
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共4 i9 h3 s9 P, ]- G" k
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
& C9 b# h) P8 L, \而toolbox目录则必须与应用程序同一目录。 d3 [3 y3 Z# O1 M7 }7 ]8 W
0 \5 _. C# _: R! R2 k方法二:; x0 y9 }+ | n
; C: v5 {. i1 p9 v. W
matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
' Z# x( p7 ^: K4 Z
, M: y, K! P0 D/ j; \. i1. 转化为c/c++程序并编译为.exe
# |9 d$ [7 z- {8 O* |5 R先验证mcc是否可用,用matlab中的example验证即可
/ c6 ~3 ~; _% J, x, C建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
- r$ e3 m7 l% _4 Z由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure! W5 ^: z8 S2 h- U
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等
3 c5 ~! _' @- Q" d* N! l程序发布需要.exe、bin\、.fig( C$ H8 E* I3 o1 ]6 s
6 ^- U0 Q6 u, ?1 [" o2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件
" n2 O" N! Z& V" A2 ]/ G4 X0 ?前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
& ^9 H% ?3 R& Z! ]另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同; y) B% Y% `) g+ L1 |4 [
+ m3 |) t6 f: i O- [3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布6 a+ ^5 ?# x Q' Z$ c% B/ l8 u
以下通过注册表自动添加path路径
( y" Y: |1 h. }; |. M+ s5 k%————————————————————————————–- h$ t7 j/ L0 W% w2 N/ `
Screen.Next(); — 进入下一个屏幕* @7 }2 k% N3 ?' R
resultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);; ~9 ?$ C' B2 T5 c2 W) Z3 ]9 Z
if (resultDialog == IDYES) then –加入安装路径
8 y. }- p) A6 wstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);; Q$ _) H/ W% ^" i
if strPath ~= “” then+ T! t3 k, O! i' H
strPath = String.Concat(strPath, “;”);. S) U2 e3 M- v
end
) ?' x/ j; m% I! r5 I- N strPathToAdd = SessionVar.Expand(“%AppFolder%”);
5 v7 }/ q, S# ~4 X$ K4 KstrPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);
) X8 o( b4 x* g8 a6 F! A3 h— 如果路径中无该位置,则加入
" l9 ?, N+ b& z% Gif String.Find(strPath,strPathToAdd) == -1 then/ d* [+ h. B. C0 v& z X6 x; m
strPath = String.Concat(strPath, strPathToAdd);# F. k; d" m6 A% g9 u5 k* V& E2 ]
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);
4 s( W/ S/ I8 N7 K end" P, o9 U4 q2 x2 T& b1 G$ C# H
end
|* n0 @% Y$ }1 y) ?7 x%————————————————————————————–
; \! q' U, C; Y5 t方法三:" A& |1 G( s7 v- E. @4 `1 S, M& N
在网上搜了一个方法,还没有用过, 贴在这里仅供参考:: I% Q! n4 ^2 D9 P
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---) q# Y/ o. `" ?% k: a
首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
$ j* u# A1 O- E其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
& {$ e1 _' N( F. {2 d; l# t第三,在MATLAB环境,执行命令
4 m8 W1 ~+ ^0 M3 I# bmcc -m -B sgl file.m7 s. l2 S$ F1 o9 F0 D
或者 mcc -p -B sglcpp file.m, H- G, p3 @& m4 w" j1 M+ h( A+ T
请键入help mcc看帮助。4 B6 _ [0 k1 a/ l @
mcc是在“command windows” 用的吗?
: ^6 X2 \ h/ }; ]; h只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗./ w" [! \# k0 E, B* @0 D
还有“添加环境变量path”是path到.exe文件的环境中是吧?
6 j4 r2 u9 o" x+ e: H9 i+ P/ l) p5 n
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装
& y9 k6 |3 I, C, W" G! _三、 如何将gui生成exe ?- {: }0 h/ c1 l* X) I/ n4 ]
已有gui.m文件和gui.fig文件' P7 v' {& U5 k' D8 @: _
1 在matlab的command窗口中输入6 e0 @& @( P* Q* S* f" @
mcc -B sgl GUI.m
! D' r7 r- D3 m2 |7 Z9 B2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器9 T# N5 D' y+ j6 I$ X( L/ k5 f' R
此时仍需matlab所必需的动态连接库。* H* H6 m4 l; G3 i. \' p3 y
3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上
. {$ }# M" F. J+ Z4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。2 S$ J4 U& c, f: O ^' ~
5.大功告成。 1 O, ^: m: R, H. z9 z
6 j1 m! K7 C! [
外一篇:MATLAB M文件变exe文件& B; f6 o1 H, Q' M/ ?
我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序
8 x' m3 p+ M) [/ H+ z8 ~1 w" ]4 h9 g希望这些对你有用
6 y6 M4 @3 t R/ U9 C2 y
/ A+ L; S5 ]4 ^' r如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
+ @1 M; h4 N/ z: |
. ^8 U: E5 _9 X+ N3 E: E S1 q8 Y一、生成独立可执行的程序(exe文件)步骤) q2 u7 j1 S$ M' y# L$ W$ O. J
- c7 Y/ {+ S: L1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
' {" G# z, Z2 y" }6 \) b2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
" F8 I( p$ S$ n7 @, k3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。/ Q) f( z, o4 L W' h" Q
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
: }' Q, V6 X6 u8 L3 H) A/ A注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
6 Z1 H; r/ b2 w+ T( \4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。" U7 |4 i4 h3 a
' ^8 @7 T Y2 i2 ]% ]二、脱离matlab运行可执行程序$ d7 p" u* j+ k9 \$ E3 ~+ ~0 O
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
) Z+ s) }: d4 S( z! ~ \toolbox\compiler\deploy\win325 v3 M" u. P$ Z! d: a
文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。0 s2 Q& j$ d$ b- R( e6 A: Y& Z3 H4 D
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。
2 A# c& W( x( S0 ?: C$ O. y在其它没有安装matlab的机器上运行exe文件前:
0 U3 u3 E, L, W首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
" ^! {' ?6 N- U, T其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。7 s9 u9 L2 e* b& c/ ?: j/ O7 A
如果没有,也可手动安装,添加的方法是:
# Y- n" X k3 i右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
' u, g$ S! W5 b0 U: Q注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。' E. F; \' i4 Q0 [) [- W
最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。$ f% b! O- y5 X
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。* b, {, [4 E; j# J7 W7 O4 G5 G
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:6 O ]! i* H! }& _
% C1 [5 F: A+ I. V( ]消除运行MATLAB生成的exe程序的dos黑屏的办法* {9 X6 n8 g1 V& k. ^% R* g( U
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:
% W0 q3 X0 h" K( q8 B. `4 W方法一: 在命令窗口输入:% p3 \! r5 O$ S( _6 N `
cd(prefdir)% m# Y* X( Y: n9 R( p& V7 b2 I4 k
edit compopts.bat
+ A% I$ R, [% [: p i! H4 A& m. r3 N在打开的文件最后添加以下语句:
- i! @9 n) D. s& S: k* T8 |' ?$ g) S$ K6 S. b* a0 R _
A.VC环境下:
1 x2 U0 x/ F' o5 G1 n1 W4 M5 |+ C1 `# j& o. u
set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
; e) O6 S z% ]' N: ?* G; h" o( R& y
B.LCC环境下:
}5 c& G% d" `' ^; T& @( X" B% Gset LINKFLAGS=%LINKFLAGS% -subsystemwindows 6 q, v0 G) k# y# w+ @
. p& ?: B0 H$ A
C. Borland:1 R3 W3 P2 U/ [- v7 H5 U' g+ ^
set LINKFLAGS=%LINKFLAGS% -aa) q1 J6 b! y& F @2 D- H7 N2 z4 y# m. y
' s4 [& v* `) P. j8 V8 U& I7 a" g保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了* q4 t3 U( ~, e8 v4 L/ ~
5 ?2 U& H, p1 X
方法二:使用suppress工具:
3 Z3 s. f) \* {6 I下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。; b% q/ S! _: X1 s% L+ N
- A' d7 F* a# v# Y& p* f
其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。
; i- F1 Y6 e( N方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
& i& Y+ m3 i* k- O$ `! H1 e |