基于Qt与MATLAB的混合编程技术
),参数“ - B sglcpp ”含义是将. m文件编译成为C++代码,生成.cpp和.hpp文件,提供图形库支持, 并编译为独立运行的exe程序。
MATLAB7.0之后版本使用mcc命令。假设要把M文件编译成C语言动态链接库文件“mcc -W lib:(对应链接库名称) -T link:lib (文件名M)”。假设要把M文件编译成C++语言动态链接库文件:“mcc -W cpplib:(对应链接库名称) -T link:lib (文件名M)”。这里我们采用第二种方法编译运行之后,在目录下面将会出现以下以.lib、.dll、.exports、.exp、.h和.cpp为后缀的6个文件。
3.2.2 在VC++工程中头文件及初始化设置等不同
在MATLAB7.0以前,在VC++程序中使用MATLAB编译器产生代码时,必须在VC++源程序中分别包含MATLAB.hpp。从MATALB7.0起,MATLAB的编译器不再提供MATLAB.hpp,代之以mclmcr.h。
另外,在调用MATLAB初始化设置时,MATLAB7.0以前采用以下代码:
void initialMATLAB() //初始化设置
{ libmmfileInitialize();//初始化MATLAB数学库
libmwsglmInitialize();//初始化MATLAB图形库
mlfHGInitialize(NULL,NULL);}
MATLAB7.0之后版本编译产生的动态链接库,对每个M文件都有初始化及释放设置,也就是说不需要整体的初始化及释放设置,只需对使用的函数进行初始化,具体参考MATLAB帮助。
3.2.3 程序发布方法有所不同
由于程序中调用了MATLAB 数学函数库或图形库中的函数,MATLAB7.0之前版本需要附带MATLAB的这些函数库才能在没有安装MATLAB 的机器上运行。以MTALAB6.5为例,我们需要收集libmmfile.dll、libmwservices.dll、libut.dll等函数库,并将这些文件添加到应用程序Debug目录或者Release目录下,这样程序就可以未装MATLAB软件的机器上运行,简化了MATLAB与C/C++的混合编程,可移植性强。
MATLAB7.0之后版本的编译器不再提供C++数字库和图形库,而是使用MATLAB组件运行环境MCR(一组标准的动态链接库),它提供了运行编译后的程序所需的基本环境[4]。所以要想程序发布到别的没有安装MATLAB的计算机上使用,必须在目标计算机上安装MCR,其文件位于MATLAB 安装目录的extern\lib\win32子目录MCRInstaller.exe,运行MCRInstaller.exe程序即可自动把需要的库函数解压到当前目录中,这样程序就可以脱离MATLAB运行。
通过对比发现,不同版本各有优势,在我们的工程项目中选用了MATLAB6.5,这样要想发布VC++创建的动态链接库只需收集库文件,虽然收集过程复杂,但是可移植性强,灵活性高,用户操作简单。
4 总结
本文采用Qt与MATLAB混合编程的方法满足了Qt工程中对数据处理和图形显示的要求,增强了Qt的绘图功能。经过项目的实践,调用MATLAB生成的可独立执行的动态链接库在项目中得到了较好的应用。当然,集成的动态链接库还需要进一步地完善来满足不同的项目对绘图及复杂数值运算的要求,为用户提供功能强大的开发平台。由于Qt优良的跨平台特性和MATLAB的图形处理功能,相信未来Qt与MATLAB的混合编程在嵌入式系统的应用前景会更加广阔。
参考文献:
[1]霍亚飞.Qt Creator快速入门(第2版)[M].北京:北京航空航天大学出版社,2014.
[2]丁林松,黄丽琴.Qt4图形设计与嵌入式开发[M].北京:人民邮电出版社,2009.
[3]张亮,王继阳等.MATLAB与C/C++混合编程[M].北京:人民邮电出版社,2008.
[4]董维国.深入浅出MATLAB7.x混合编程[M].北京:机械工业出版社,2005.
[5]魏鑫,陈辉强,高飞.Qt与MATLAB的混合编程究与实现[J].计算机与现代化,2010,9(1):168-170.
[6]孙鑫,余安萍.VC++深入详解[M].北京:电子工业出版社,2006.
[7]刘维.精通MATLAB与C/C++混合程序设计(第2版)[M].北京:北京航空航天大学出版社,2008.
[8]马兴义.MATLAB6应用开发指南[M].北京:机械工业出版社, 2002.
[9]张明友,汪学刚.雷达系统(第2版)[M].北京:电子工业出版社,2006.
本文来源于中国科技核心期刊《电子产品世界》2016年第9期第57页,欢迎您写论文时引用,并注明出处。
Qt MATLAB 混合编程 动态链接库 201610 相关文章:
- 基于Qt/Embedded的/蓄电池状态检测控制软件设计(09-06)
- 基于Hilbert变换的电压凹陷检测方法(06-20)
- 牛奶微生物检测仪的设计 (06-13)
- 基于MATLAB的皮肤听声器系统的研究(08-20)
- 线性预测及其Matlab实现(04-22)
- 在WaveMaster中创建自定义运算函数(06-17)