matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:
* l5 F( a' ?+ A; n1 O) m; b' C' W R
1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。% k J! C4 q+ L$ ^: x$ T
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
3 S/ Q: v! s) B: G6 ^1 S虽然生成的可执行程序可以脱离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% B: d2 B f2 h V; h
libmat.lib
5 N" t4 c0 Z) n' Y8 n7 \libmex.lib6 n1 a3 ~; r4 P3 K! n9 _
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"。 ) H3 _4 Y, ^& m! Y* M. g) u
* r; o) ^, v% ~/ C4 b7 K1.设置编译器:
3 W( j3 `8 ?9 v1 m* x$ b在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:; _5 o% D+ [1 U8 w) Q
Mbuild –setup, 按提示选择matlab自带编译器LCC。
7 R* t8 d$ n% ^6 ~0 _5 [4 Z3 w4 e! H" O Q1 `
2.将脚本编译为可执行文件:
: p6 p0 S& m( _2 _; M8 ]" a: m如项目文件包含:gui.m, gui.gif, fun1.m。
' Y( Y8 ?/ t# o: ?8 M1 Z
7 X( @0 J; v* d. x% \' r" 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环境运行必需的文件。
* M2 U3 x/ U0 [* p; }* D# ?% f. G# h j6 b, o+ J. k! C
3.在未安装matlab的机器上运行可执行程序。
. s9 i9 k" M1 w6 s将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。
& N$ R5 \: ]6 w将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。5 ]/ y; k( y" j, @& T5 |
# |) q% Z( W4 o! X3 ^' i4.去除独立可执行程序运行时的“DOS黑窗口”。
6 ~1 K& B1 X+ c L以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
. `2 W4 R2 y$ Q4 e0 i7 ` a% G W/ B2 f3 }8 J6 V% O$ r9 h
matlba命令行输入:2 L+ i, p9 u; X7 I4 s% t
3 g2 m( n" n1 l' j+ xcd(prefdir)7 q8 b: I6 v* d
edit compopts.bat
/ a0 G2 \# [5 i! h s
# c1 Q5 ~% {. }+ p$ d! |此时compopts.bat打开,在文件最后添加:
5 q2 j1 q$ k9 `. i+ C4 D+ O7 U# h7 g/ E
set LINKFLAGS=%LINKFLAGS% -subsystem windows; S& d6 }$ R9 f4 F& D# x
2 h b+ T: w' h& D5 D1 u
如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。. u. c4 O$ s+ }$ d
+ w! x+ K' W5 q) m1 S- q( s8 P
另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
: O9 C( x+ I; S/ [ I+ n; P6 |# c9 L5 P0 H' Y; ^2 U
Microsoft Visual C/C++:# g) F2 [- o$ @7 }! z
- \( P" b( {2 U; p; Aset LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup, _) p8 U9 \- O2 b& x' H
8 ?. z O L% a0 sBorland:
2 N) E6 E5 ^1 r+ C
7 y8 o1 _/ o$ y. F8 z2 J8 Oset LINKFLAGS=%LINKFLAGS% -aa
7 S9 V! u/ Z r! m7 P8 G———————————————————————————————————————–4 A! Y' ^9 l) @/ G1 A. w8 O
9 _) T( ^5 ]& \0 o8 f( N& m方法一:
7 ~5 |9 n7 y6 x已有gui.m文件和gui.fig文件
% m: ]' e& b& C. }1 在matlab的command窗口中输入
5 h0 v2 N4 F$ d) c+ u7 j" @mcc -B sgl GUI.m2 [; y0 S0 t2 z( ^4 |+ h( ^
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
5 j" C h2 B! i
. `8 W+ j6 h, m: O }% H) w此时仍需matlab所必需的动态连接库。
?- ~% ^9 h/ D3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
; f/ W/ @: }# K, C7 d4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,) k7 k0 F0 U; C- j, \1 i& m" V
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共3 p: J8 g2 b4 X/ x$ S+ B: b+ {0 F
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
C- h! a6 H& T" U, t9 W% w而toolbox目录则必须与应用程序同一目录。
. X* o+ P; Y7 c. E& k
2 d, Q9 j5 v6 | a( g% e方法二:
6 x+ { a; H3 l, Y2 l! v
( c( ?6 @' p8 k3 H. R+ o/ dmatlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。& h- p# F9 a; @) Z
& O7 C' b2 T! I& _# O8 [/ m1. 转化为c/c++程序并编译为.exe) a3 U! e4 H$ ?. b9 ?: N
先验证mcc是否可用,用matlab中的example验证即可
" Y! m# A- |: x! @! T# x# `建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
. [: C9 l4 i! b; r由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
( b% y5 U" g0 ? M& e! }编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等
$ Z L: |! O6 J4 x, l p) Q2 U程序发布需要.exe、bin\、.fig. M/ O& f; V6 h
* G m. f1 M) |: S( r( v
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件
7 f3 o; z& o! N( U; V前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径9 V4 P4 P; z* ?, I7 o& p1 B1 O
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
; L4 \" l3 P6 j# p7 p0 w x5 N* ?% K3 b5 {; ~
3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布6 Z4 t7 @: l9 h3 O3 {* v
以下通过注册表自动添加path路径% h8 y) R# J+ @ q* [2 h
%————————————————————————————–
; T5 D" P+ Q7 m! n; MScreen.Next(); — 进入下一个屏幕: X' A6 l% N) j/ v9 |9 Y
resultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);9 M& P0 Q( L$ |
if (resultDialog == IDYES) then –加入安装路径
' I7 I S, H! N- `, m% GstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);5 H! _! x# @. {% t3 t0 X
if strPath ~= “” then" I$ o3 [4 W# W6 R
strPath = String.Concat(strPath, “;”);$ Z* ]0 ~* Q* _% b7 j C
end
8 r: |3 m9 j3 N5 H" G4 q' K strPathToAdd = SessionVar.Expand(“%AppFolder%”);% C! e! x( b/ Z
strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);. l* T) E1 Q1 M' c
— 如果路径中无该位置,则加入* N9 a$ T( y( H: E
if String.Find(strPath,strPathToAdd) == -1 then
+ g/ U5 \2 f$ S+ N9 _' k, h strPath = String.Concat(strPath, strPathToAdd);8 T9 v9 n R C! o1 T I4 }: ]3 ^
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ); d9 L$ Z2 \% [
end
9 q* N8 P3 j3 `* W* D, z+ F* Zend1 @4 `2 m8 R8 R. V9 ]5 e8 [
%————————————————————————————–1 d. w2 L$ v0 J1 u! y" c
方法三:
$ m8 c9 w% p' g; `+ g2 R: C在网上搜了一个方法,还没有用过, 贴在这里仅供参考:: L) U( J5 R( R5 e# N Z# h/ }0 x
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---8 z; D; h4 b6 a$ R
首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
, y$ n! l' T1 g, T( d1 o. ^& a其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
; w+ A. y* g, G C. v第三,在MATLAB环境,执行命令2 {- B5 S& M* |( M
mcc -m -B sgl file.m
# ]. R0 F. m5 g% E# i% N9 a0 ~或者 mcc -p -B sglcpp file.m
$ W7 y$ A3 |1 a3 L z请键入help mcc看帮助。: q- ^9 F" c6 x
mcc是在“command windows” 用的吗?
5 C1 ^( [1 n$ M) j. D只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.
6 k8 b1 r/ X( ^6 G还有“添加环境变量path”是path到.exe文件的环境中是吧?
2 e6 u0 X/ i% E9 y% v+ {" B) {+ X/ G; _+ Z% F, ~0 w4 F
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装2 v+ k. w" ]: ?9 ^( p9 F. e( N/ o( m
三、 如何将gui生成exe ?2 K$ Q2 U* A; i; k# W
已有gui.m文件和gui.fig文件
+ z$ `6 C- @" z1 在matlab的command窗口中输入( W7 J0 E" x% e8 o
mcc -B sgl GUI.m
( K2 h6 b# V. d: |! z( m. o2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
8 Z& q7 M5 g/ i* D# w此时仍需matlab所必需的动态连接库。0 x# w# j4 |# B: T2 W
3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上
+ p' N2 m1 [. C' q+ E: A4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。3 }$ B" ~% h7 A7 C7 ?: T& i
5.大功告成。 5 q1 p) ^% Q8 d: L' ^& r, V/ g% k
6 i. c: k/ O# \+ a% A外一篇:MATLAB M文件变exe文件
2 f# k; l M# a* W1 D- Z# f我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序5 v# a$ C& }1 [) \, m+ n
希望这些对你有用3 ?' g, O8 } ]: I2 \7 K7 F
6 ^3 [1 m1 ]! y! c4 H/ O2 l n
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
7 N3 z' l0 h Q$ c3 _$ P6 ]7 b1 l0 a3 Y: G
一、生成独立可执行的程序(exe文件)步骤/ e5 e, y( s8 f# Y# E
6 S6 R6 a* E8 h ^" X
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。6 z* I, l a3 B# N
2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
* k0 |- i# y& C. r0 t3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
% Z8 d X0 _% g! a7 H! L9 O# j当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;1 z) y0 ?5 k: p1 k
注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
) w; i& R7 d4 d+ N; I1 L4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
$ h; b" j" M. c J( `5 ]
: M# o& X) _6 X: E二、脱离matlab运行可执行程序
) i1 N1 ` D" I8 ^- tMCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
$ Z+ v1 Q7 d# D: k3 L& i& [ \toolbox\compiler\deploy\win32# c) \ [: G5 \+ R& {% U' k9 L
文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
8 @! y, H% V f. c在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。- t& O& i1 M& G; k4 _
在其它没有安装matlab的机器上运行exe文件前:3 U; }6 g$ f+ M; o* I) Q
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
+ {+ g* n# H- [8 K" k! E其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。8 B% G. n* l* b! z
如果没有,也可手动安装,添加的方法是:
0 k. ^& d" M6 f X( r: l6 v右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。6 J- s! A1 n9 ` A/ w
注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。
1 Y% |# F. e H) D5 f最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。- k% B; T5 t) B. `. X3 @
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。
! k& B+ L! P( r! P. |2 Q7 f1 ^- W美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:9 S' ^+ e6 X4 D4 D H# z: V
: l' j$ a+ T0 Q' \消除运行MATLAB生成的exe程序的dos黑屏的办法" `! z& w9 e, N- Q3 X/ E. G R. a
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:( l& y0 i9 D p, U+ Z3 [0 z$ q
方法一: 在命令窗口输入:( x4 [* _9 m7 K
cd(prefdir)
6 p3 Q; b0 D6 @+ l& U0 h$ ]edit compopts.bat9 v s& G B7 |% W9 z& R# f2 A/ c0 c
在打开的文件最后添加以下语句:
0 d: L. j- n6 G# q
! t" R4 q9 c5 m8 pA.VC环境下:
1 v- G; Z- ^' l% @: s$ {& L3 A6 k& {$ K
set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
0 o' ^/ e. I6 z8 j) S- B4 M
6 A$ H' P( v A' @6 i) h9 MB.LCC环境下:
7 o; k* v$ f, B0 \set LINKFLAGS=%LINKFLAGS% -subsystemwindows
1 Y4 B) H4 R8 @1 f# u+ f+ V" m5 {
) e, l* E8 t+ `1 ~0 A+ @C. Borland:" F% X) p" F, k {/ C$ }+ i! F: M
set LINKFLAGS=%LINKFLAGS% -aa
# C( K( ^! X, m# u% O! h
! A7 J( ^5 Q3 X( |3 d0 N/ T% [保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了. A- C+ u6 G9 m1 [$ J# v: I
1 [8 l5 t6 m7 ~8 E6 p* c) R; D方法二:使用suppress工具:
* B! f! G( r$ ]下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
% s+ A* s1 W, D$ C! _% q- w) F! `$ m' S9 V% n9 X' _* A4 i
其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。
2 q. l1 O" f) e* \0 G方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。; { |/ S% S4 Y
|