MatlabCompiler或mcc的使⽤
1.设置编译器:
⾸先需要配置⾃⼰的Matlab Compiler,Matlab Compiler的作⽤是将程序编译成为机器可以直接执⾏的程序。配置Compiler的⽅法是在Matlab命令窗⼝输⼊:
mbuild -setup,按提⽰选择matlab⾃带编译器LCC。
实验记录:
注:若出现没有编译器,则到C:\Program Files\MATLAB\R2010b\toolbox\compiler\deploy\win64下的MCRInstaller安装即可。
>> mbuild -setup
Please choose your compiler for building standalone MATLAB applications:
Would you like mbuild to locate installed compilers [y]/n? y
Select a compiler:
[1] Lcc-win32 C 2.4.1in D:\PROGRA~1\MATLAB\R2007a\sys\lcc
[2] Microsoft Visual C++ 6.0in C:\Program Files\Microsoft Visual Studio
[0] None
Compiler: 1
Please verify your choices:
Compiler: Lcc-win32 C 2.4.1
Location: D:\PROGRA~1\MATLAB\R2007a\sys\lcc
dos命令运行exe程序Are these correct?([y]/n): y
Trying to update options file: C:\Documents and Settings\Administrator\Application Data\MathWorks\MATLAB\R2007a\compopts.bat
From template: D:\PROGRA~1\MATLAB\R2007a\bin\win32\mbuildopts\lcccompp.bat
Done . . .
--> "D:\PROGRA~1\MATLAB\R2007a\bin\win32\mwregsvr D:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcomutil.dll"
DllRegisterServer in D:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcomutil.dll succeeded
--> "D:\PROGRA~1\MATLAB\R2007a\bin\win32\mwregsvr D:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcommgr.dll"
DllRegisterServer in D:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcommgr.dll succeeded
说明:因为我的机器上原来装有Microsoft Visual C++ 6.0,所以会有两个编译器,会提⽰你选择⼀个,这⾥选择系统⾃带的,也就是“1”。
2、编译已经写好的m⽂件
说明:mywavelet.m是我写的测试⽂件,内容如下:
function mywavelet
clear all;
a=[100:900];
b=sqrt(a);
plot(a,b);
在matlab环境中编译⽂件,⽅法是:
>> mcc -m mywavelet.m
其中mywavelet为要转成exe的m⽂件。执⾏完毕后,会发现在MATLAB的Current Directory⽬录下,会出现⼀些新⽂件,注意观察^_^。这些⽂件就是,编译好的⽂件。这时,可以点⼀下exe⽂件,看看是否正常,显⽰图⽚否?
ok后,将它们拷到⼀个新⽂件夹下,保管好啦~
3、寻所需要的动态链接库
MCR是由matlab的运⾏环境,占⽤不到300M的对于⽤不同matlab版本⽣成的exe⽂件,MCR版本也会
有不同,因此,在程序打包时,最好将相应版本的MCR⼀起打包。
在已安装Matlab机器上,的⽂件,我的是在这个⽬录下:
D:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\
不同的MATLAB版本,可能路径不⼀样,⾃⼰⼀下。(7.0以前的版本是)。
到后,把它也复制到我们保管好的⽂件夹中,这样我们的⽂件家中有两类东西,1、MCR安装程序,2、编译好的程序。
《深⼊浅出MATLAB7.x混合编程》董为国:
“
编译后程序(偏重于动态链接库⽂件)的发布:
⽆论编译成可执⾏⽂件,还是动态链接库,要使它们能够发布到别的没有安装MATLAB的计算机上使⽤,必须在⽬标计算机上安装MCR。可以利⽤MATLAB命令buildmcr来创建可以发布给最终⽤户的MCR安装⽂件。buildmcr的功能是创建⼀个包含MCR需要的所有⽂件的zip压缩⽂件。buildmcr有如下两种调⽤⽅式:
>> zipfile = buildmcr
zipfile =
D:\tools\matlab\toolbox\compiler\deploy\win32\MCRInstaller.zip
也可以使⽤输⼊参数dirname来指定MCRInstaller.zip的保存⽬录。
>> zipfile = buildmcr(dirname)
>> buildmcr('.')
将把产⽣的MCRIntaller.zip保存到当前⼯作⽬录。
⼀般来说,需要发布的⽂件有3个:
(1) 编译得到的可执⾏⽂件或者库函数;
(2) CTF⽂件;(3) MCRIntaller.zip
在最终⽤户的计算机上,⾸先需要把MCRIntaller.zip解压,并把MCR中可执⾏⽂件在⽬录加到系统路径上;然后就可以使⽤编译后的程序了。
注意:MCR不⽀持在startup.m中使⽤addpath命令增加搜索路径。
startup.m是⼀个可以让⽤户设置⼀些关于MATLAB运⾏的个性化设置。如果你在运⾏发布的程序时报错。必须让addpath命令只在⾮发布情况下才有效。利⽤isdeployed命令:
if ~ isdeployed
addpath(...);
% 其它程序
end
另外,编译后发布的程序在运⾏时需要把CTF解压。所以在运⾏时,需要确保对CTF⽂件所在⽬录有写权⼒。否则,发布的程序在执⾏时会报错。如果编译后的程序以光盘的⽅式发布,那么程序必须先复制到硬盘的某个⽬录,然后再运⾏。
”
4、将保管好的⽂件夹移植其他的电脑上
这个电脑最好没有装MATLAB,以检查在没有MATLAB的环境下,可执⾏程序是否可以执⾏。⼀般是会有问题的,因为还有很多动态链接库没有考过来,程序运⾏时,会不到很多东西。
我们需要做的是,双击安装,安装⽬录就选我们当前的⽬录。确保我们编译好的程序,和安装MCR之后的⽂件在同⼀⽬录下。
结束,点击可执⾏⽂件,应该能出现图⽚。试试看。
在MATLAB⾥运⾏可执⾏程序的办法是在前⾯加⼀个!,⽐如:!picshow,后缀名可有可⽆。
在其它没有安装matlab的机器上运⾏exe⽂件前:
⾸先安装matlab的运⾏环境。在同⼀机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
其次是要将“安装⽬录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是⾃动加载。
如果没有,也可⼿动安装,添加的⽅法是:
右击“我的电脑”“属性”“⾼级”“环境变量”“添加”指定⼀个变量名,然后将上述路径复制到⾥⾯就可以了。
注:在安装过程中会弹出让安装Microsoft.NETFramework可以不⽤安装。
最后就是将编译⽣成的相相关⽂件拷贝到同⼀⽬录下,双击即可运⾏。
问题:⽬前此⽅法可完全运⾏在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运⾏,但是不会出现任何MATLAB 编译的界⾯。
美中不⾜就是,运⾏的时候dos的那个⿊⾊地窗⼝⼀直存在。下⾯将实现去除⿊屏的办法:
消除运⾏MATLAB⽣成的exe程序的dos⿊屏的办法
基于MATLAB⽣成exe⽂件后,每次运⾏都存在dos⿊屏的问题,现在可以通过以下⽅法解决:
⽅法⼀:在命令窗⼝输⼊
cd(prefdir)
edit compopts.bat
在打开的⽂件最后添加以下语句:
A.VC环境下:
set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
B.LCC环境下:
set LINKFLAGS=%LINKFLAGS% -subsystemwindows
C. Borland:
set LINKFLAGS=%LINKFLAGS% -aa
保存以后,再重新编译m⽂件,⽣成的exe⽂件运⾏起来就没有dos窗⼝了
⽅法⼆:使⽤suppress⼯具:
下载附件中的suppress压缩包后解压,(当然您可以⾃⼰去Google然后再下载)会看到⼀个suppress.ini⽂件,⽤记事本打开,然后将其
中“”中的改为你⽣成的exe⽂件名。将(有个关盘和显⽰器的图标),改后的 suppress.ini放到你⽣成的exe 的同⽬录下。执⾏或者您⾃⼰⽣成的exe可以了。当然您可以⾃⼰修改 的名字,改为您⾃⼰想要的名字。
其中的⽅法⼀在使⽤后⽣成的exe再到没有任何安装MATLAB的机⼦上运⾏也不会有⿊屏了。
⽅法⼆的缺点就是要同时存在您⽣成的exe以及,必须在同⼀⽬录下。
>> mycmd = ['NewNhello ',num2str(5)];system(mycmd);
利⽤mideva编译脱离matlab环境的动态链接库
如果你看过了以上的⼏种⽅案,就会发现它们都必需依赖于MATLAB环境,那么如何能够彻底脱离MATLAB环境呢?这也是我最近⼀直在研究的,但是天不随⼈意,虽然到了相关资料可是却和实际情况相差太远。本来想等全部搞定之后再发这篇⽂章的,后来转念⼀想不如让⼤家共同研究,也许某位达⼈能参透其中奥妙。此⽅法是利⽤⼀个叫Mideva的软件,是Mathtools公司推出的⼀种Matlab编译开发软件平台(注:据笔者掌握的最新情况,Mathtools已经被Mathwork收购了),Mediva具有编译转换功能,能够将Matlab函数成编写的Matlab程序转换为c++形式的DLL,然后在Delphi中调⽤动态库函数,⽽不必再依赖Malab环境,前提是必须要有两个动态链接库mdv4300和ago4300。⼆、编译步骤
利⽤Mideva平台实现Delphi与M⽂件混合编程步骤如下:
1、编写M⽂件
2、在Mideva中执⾏M⽂件
3、⽣成动态链接库(DLL)
4、Delphi中调⽤DLL函数
三、⽅案总结
如果真能实现,那将省去许多不必要的⿇烦,可是笔者的问题在于⽤Mideva编译过后的DLL,Delphi⽆法识别-_-b,⽽且根本不到
mdv4300和ago4300两个动态链接库。如果那位仁兄能够成功,望请告知,不胜感激。
Visual C++调⽤Matrix<LIB>——实际是VC与Matrix<LIB>的混合编程
Matcom是Mideva内核的C++编译器,它可以⽣成C-MEX和独⽴的应⽤程序。Matcom包含了⼀组称为Matrix<LIB>的C++库,是MathTools公司开发的⼀个矩阵数学库,提供了⼀个双精度Matrix类型——Mm,它可以是复数矩阵、实数矩阵、稀疏矩阵甚⾄n为矩阵。
在Visual C++⼯程中直接按照Matrix<LIB>的语法编程,即可以实现⾼效的编程。
在Visual C++中安装Matlab Add-in
Matlab add-in是Matlab 6.0以后版本引⼊的新⼯具,它可以⽅便地⽣成独⽴应⽤程序,也可以将得到的代码嵌⼊到其它应⽤程序中。但是,最新的Matlab 7.0以后的版本不再⽀持Add-in。
Matlab产⽣的COM组件的调⽤
matlab com builder
ActiveX控件
C/C++调⽤Matlab计算引擎
Matlab Engine⼏乎可以利⽤Matlab全部功能,但是需要在机器上安装Matlab软件,⽽且执⾏效率低,因此这种⽅式的实⽤性较低,在商⽤的应⽤软件开发中不宜采⽤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论