matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:# T$ y, w3 B5 u8 h( X
/ v0 [6 x0 w& e% V* E
1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
- L( S/ @& w, mMatlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。) ]# u1 p0 r Q z9 d
虽然生成的可执行程序可以脱离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
2 M8 P) q% G8 w k, b0 f+ ?libmat.lib
; p; V! V! {& A- z% ]libmex.lib/ P9 ~% Y0 y. j+ f$ w- c
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"。 9 ]8 q9 |4 f* h9 u, Q4 J
2 I- m6 E1 c& ~5 F/ G$ \7 E8 n1.设置编译器:: C0 J) |4 ?5 t
在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:
$ m: i+ a. D- m- l5 {. r/ Q FMbuild –setup, 按提示选择matlab自带编译器LCC。
! q! r- z; i' D; _
' x6 V( z8 p. V6 g) ], g! ^- H& E2.将脚本编译为可执行文件:
1 n7 x- e4 r: f0 x9 r: ?9 r如项目文件包含:gui.m, gui.gif, fun1.m。, q7 O+ r3 _- h" V6 t: G$ N1 U
" Y* [9 C0 i1 F% m* W/ P在此路径下命令行输入: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环境运行必需的文件。
% u9 V3 k3 W2 h1 s v [
0 f1 ^, i2 ^! R/ n) ^3.在未安装matlab的机器上运行可执行程序。! q' g/ t9 D) H& |
将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。2 y7 ?' _& e3 c$ Z4 }) s$ d
将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。
! Z: K( A7 i1 l7 a' d; S( v1 A5 ?2 Q" l) V# {( E2 j
4.去除独立可执行程序运行时的“DOS黑窗口”。" J* U" }! c) i6 M
以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
/ R9 Y9 i$ [1 k
; L: Y( T' c* M% E) v) ^3 wmatlba命令行输入:3 C, o F3 e( ?" j
* v" K$ O0 q. G8 T3 s0 ~
cd(prefdir)7 Y; I2 X) W( [
edit compopts.bat
4 j; w0 e$ X/ r# ~" t% y7 a
9 y3 d- `1 M& N! Z此时compopts.bat打开,在文件最后添加:
k' `6 `0 I% \* v
- V, k' e P2 Q. d Rset LINKFLAGS=%LINKFLAGS% -subsystem windows, \) L8 R9 v5 b) R! ]
# R# G! U9 `+ b/ N
如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。! v! @$ w- p2 j0 X6 i/ c
2 [, r( E3 D/ p# ~2 a, \$ [& a( E j. ~
另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
' e9 p+ ~9 t, ^: G, U2 N
7 }* L' ^3 a ] `' L5 {9 \! jMicrosoft Visual C/C++:
( l e& c2 {- g7 D3 M, ?
+ \0 |! Z# U7 W$ w0 ^8 _set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup% G* l8 A( `" U& Z8 }
% |2 h4 a! b' W
Borland:
* P7 ^: `( m' h% L1 w1 s* Y& M& s) {
set LINKFLAGS=%LINKFLAGS% -aa. m' [: V2 Z3 v3 S4 T8 H# E
———————————————————————————————————————–
: n$ U+ Q: }. |& `' W* j8 c
+ X& k, a! e$ D+ M方法一:
* A6 I# e, V8 ]! d) m8 P E8 c, l+ ~已有gui.m文件和gui.fig文件
) C* x: D% G. R; P; E- B1 在matlab的command窗口中输入" I& i" j9 ^- N" J" Y. {# f
mcc -B sgl GUI.m
1 c; ^9 f! q2 Z2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
! y% C5 S9 v0 A: e
9 H0 i( }; T/ y$ T5 ^6 A( W此时仍需matlab所必需的动态连接库。
# E. }/ p! C/ l% |6 Q# V3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上6 w v) x9 i4 A
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,6 d4 {; O+ u3 E# N _) ^. v
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共% ?( Y3 x" q# O& F% @
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。# F% D* d6 F% c+ P
而toolbox目录则必须与应用程序同一目录。" w: W* t5 n2 ^- _9 L+ m
0 @2 S2 o8 u; e0 O. ^! J
方法二:' [8 D5 C% m; C {: R6 D
* U _: Q$ ?" y9 I8 P& Jmatlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。5 a8 L5 Z! c; B, C4 X
' Y. W Z, q: l6 @' s: d8 X6 M1. 转化为c/c++程序并编译为.exe/ M7 s) X- s! M
先验证mcc是否可用,用matlab中的example验证即可
4 [3 F9 I7 E* H3 s1 U建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
- K2 I& J2 k/ B$ G2 P3 J& N由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
5 }6 _, P" s d2 a- R编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等+ U, X5 Z9 l' H3 L8 g) S
程序发布需要.exe、bin\、.fig" j6 ?$ D7 v) s$ e0 n
: e9 v5 A0 N: m* V, h' t
2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件3 }0 x2 L" N( z$ e, B& d8 L, Q
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径% x! m w! G1 ~, o q& B+ {1 R. G
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同
6 Y0 H0 o" H' d1 L# t, P
9 r$ _$ S0 E# F7 K2 n3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布$ j' b" U8 }% C* o' B/ y. A
以下通过注册表自动添加path路径
. m# ` D! x' r+ Q%————————————————————————————–1 ~: N* x! T% @) |9 O$ @
Screen.Next(); — 进入下一个屏幕9 C& r& d' T) u# @
resultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
4 n r3 a& ?2 yif (resultDialog == IDYES) then –加入安装路径
. h& Q. N5 C" {# M0 FstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);' E# [" J2 j1 X5 Z8 X" r
if strPath ~= “” then
7 M. G$ s0 E2 E strPath = String.Concat(strPath, “;”);3 d. j) p& m c
end. i9 d9 r0 g* p) C! o: w" Y
strPathToAdd = SessionVar.Expand(“%AppFolder%”);
# X5 m" w# R* V. ^4 D: ?strPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);" d, A- m* X9 c$ b+ O, c
— 如果路径中无该位置,则加入
" V1 w* ^ x, |+ \/ n' kif String.Find(strPath,strPathToAdd) == -1 then
% Z/ r% X( u p2 L7 o strPath = String.Concat(strPath, strPathToAdd);! x) R: V( X- w7 n
Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);5 ^: y8 l) {; @' H) G9 k0 O$ @8 e
end! a3 R+ R$ o/ |; n; i4 y+ R& w
end
6 j+ R" `( q9 {0 v6 V%————————————————————————————–
# c6 j" F+ R) G方法三:
0 ^2 T$ K$ f- _% m; E( T7 x在网上搜了一个方法,还没有用过, 贴在这里仅供参考:
: q# C- [7 y" _, }/ l1 i一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
* x3 U& X0 n! K! g' Z0 U5 A首先,使用mcc编译得到.exe文件,具体参数见帮助文件;! _( m$ e" d5 y3 l- V8 V& K
其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
& j' ^0 C$ j# E第三,在MATLAB环境,执行命令5 ~) Z7 f- C5 \: ~
mcc -m -B sgl file.m$ {+ _9 } ]( t% U
或者 mcc -p -B sglcpp file.m
( R6 E9 }& K. n4 z, I: J2 E请键入help mcc看帮助。. ]% ?8 l4 g" a( h0 } T2 Y7 _
mcc是在“command windows” 用的吗?
& M7 _4 u8 q. z/ G7 i% F( c. [只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.2 c3 r! R# K: N5 e, u5 ~9 v
还有“添加环境变量path”是path到.exe文件的环境中是吧?
4 \" q G0 j$ ]( d' B" {9 e3 e6 J6 Z! V" A/ G6 e
二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装
8 R4 {5 _8 }4 }5 ^$ M9 C% _1 N三、 如何将gui生成exe ?
$ x' d7 v; \5 _/ Q4 ?% J已有gui.m文件和gui.fig文件$ ], k3 _. B6 C1 j L* {$ \
1 在matlab的command窗口中输入8 S9 _& f- J8 L( d8 V3 B* O5 V
mcc -B sgl GUI.m
# }- |) M7 z- Q8 H' @2 O, n0 P2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器3 [1 H0 J+ n' K0 B9 ]4 |0 k# O- n
此时仍需matlab所必需的动态连接库。1 d" Q+ {0 p8 |' g( a4 F5 h
3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上
' ~/ q& \- a' J4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
1 Y, M6 y; I6 g: b u! Q( _8 b5.大功告成。
- b2 Z5 F8 ^' J' c; ~. o. j3 {4 s6 k6 S& C- W
外一篇:MATLAB M文件变exe文件
5 o0 }& m$ r; G1 Z# R8 |3 D我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序9 G( ?' B( C3 }( H* W( r0 q
希望这些对你有用1 s+ @/ F0 u- r1 @& h
4 M# C8 J! o$ c0 ^" A
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
6 ?( k7 {6 R+ f5 k2 h3 |1 z) N. R9 m, O7 l7 y; M
一、生成独立可执行的程序(exe文件)步骤
0 E/ s- I2 \0 ~7 R( w& f. I4 v! i+ I; M$ G( S3 ]
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
+ x8 n" N, v4 u, e0 p2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
4 g7 t. _- f( t! b+ ~ p3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
, ~+ Z4 F8 g4 O( ]$ T当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;0 D' P, `, ?# |9 N' S$ R
注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;1 C6 U F1 E1 p6 N7 ?
4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
; Y2 r) A# o R) m6 t. T7 X. B
二、脱离matlab运行可执行程序1 }6 g( t8 C8 K" X+ k N
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:# d" i& R& s( D* _
\toolbox\compiler\deploy\win32
3 o2 }# u* A: b! m: J, L文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
# k' C; M3 R& `- _在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。$ U$ A* I0 c+ o- o0 l
在其它没有安装matlab的机器上运行exe文件前:
0 e2 r- u- o9 Y5 N: d& H8 u首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。9 Y" Y2 q1 Y& Z+ l" ]/ B
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。
$ d, j- @+ S' F! N$ t P. F如果没有,也可手动安装,添加的方法是:+ S7 I2 ~# o5 T: F1 N8 n
右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。 |7 K8 l1 [% m, X" e
注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。, ]# \3 _- C+ n
最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
; y1 P# W6 b' g, o( N问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。
# p( k- G! H" b美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
9 ?2 i! ]# G: F7 E1 d+ H/ ~, K" A1 D0 A
消除运行MATLAB生成的exe程序的dos黑屏的办法/ F, F! Y8 N) e' |/ F7 q( `
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:" v4 }2 f: C4 Z
方法一: 在命令窗口输入:5 M, z1 B4 s, I3 t
cd(prefdir)8 J3 K# O+ X6 \8 A: D7 t
edit compopts.bat, r3 A. R3 R, {
在打开的文件最后添加以下语句:
' W5 m' r5 y- c# f. C
7 k" H9 t1 b8 `, \" C9 _ UA.VC环境下:0 m) T; v: |2 r- O/ X; t! E5 u
6 e, e9 a) _$ u1 Z/ l9 uset LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup # B, K; B0 k! ^( U- D
4 b& F2 g/ F7 nB.LCC环境下:) B* j; U/ |3 D5 d6 V7 B7 d, ]
set LINKFLAGS=%LINKFLAGS% -subsystemwindows
9 V5 O( n, W H. G2 E" V7 W' ~* f! H1 m J
C. Borland:
; h7 n) G$ t$ X' M7 D set LINKFLAGS=%LINKFLAGS% -aa; h3 l* x) }2 w' @* I+ H7 P
. N( S* r Q1 P保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了
I. u* n# T2 w: u% i
3 S* @8 D* H* _, r) ~方法二:使用suppress工具:- e8 p! q" o Y& W5 F
下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。
Q+ G) a/ P& p( }: V6 r
( ?- ]& P, ?2 K8 d G* ~7 h8 [/ f0 ^8 W其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。0 v7 J; S% [8 }& b9 \$ l
方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。6 P1 c, Y0 J7 n2 c$ `8 X/ s2 I
|