WIN8.1下Qt调用MATLAB engine
环境说明
1. 系统:64位win8.1
2. MSVC2013:64位
3. QT5.4.2
4. MATLAB:2014a 64位
说明:在本文档中调用matlab engine的教程是在QT Creator编译环境下,并不是在MSVC2013环境下进行。
关于MSVC2013下的QT,使用过程应该与MSVC2013 编写的32位控制台程序一样(没有做过测试),见链接
http://blog.sina.com.cn/s/blog_89a45b020102vrr1.html
IDE平台搭建
1. MSVC2013 64位的安装
a) 这个就不细说了,直接在网上找一个安装后即可
b) 实际上这个也可以不用,但我为了用MSVC2013的编译器,就装了一个
2. Qt5.4.2的安装
a) Qt5.4.2是当前Qt的最新版本,自带Qt Creator
b) 下载地址:http://www.qt.io/download-open-source/#section-2,选择下载如图1所示的版本
c) 下载后安装时,选择如图2所未的选项安装即可,这种情况下只安装集成了MSVC2013 64位的编译器。之后一路安装下载即完成
图1 选择合适的QT版本
图2 选择安装的项目
Qt调用matlab engine的设置
1. 只需要将matlab engine的头文件和库文件目录,正确地在Qt工程文件中引用即可。不同版本的头文件和库文件位置不同,但都在matlab安装目录下的extern下,include目录下都是.h的文件,lib目录下都是.lib文件
2. 在Qt工程.pro文件下加入如下几条命令:
INCLUDEPATH += C:\MATLAB\R2014a\extern\include LIBS += C:\MATLAB\R2014a\extern\lib\win64\microsoft\libeng.lib LIBS += C:\MATLAB\R2014a\extern\lib\win64\microsoft\libmat.lib LIBS += C:\MATLAB\R2014a\extern\lib\win64\microsoft\libmx.lib LIBS += C:\MATLAB\R2014a\extern\lib\win64\microsoft\libmex.lib |
3. 说明:MATLAB的安装路径最好不要有空格,像“C:\Program Files”这个安装目录就有空格。对于这种情况,2中的库的引用方式会报错,解决办法如下:
INCLUDEPATH += $$quate(C:\MATLAB\R2014a\extern\include) LIBS += $$quate(C:\MATLAB\R2014a\extern\lib\win64\microsoft\libeng.lib) LIBS += $$quate(C:\MATLAB\R2014a\extern\lib\win64\microsoft\libmat.lib) LIBS += $$quate(C:\MATLAB\R2014a\extern\lib\win64\microsoft\libmx.lib) LIBS += $$quate(C:\MATLAB\R2014a\extern\lib\win64\microsoft\libmex.lib) |
测试例程
1. QT本质上是C++程序,因此直接将matlab中给定的例子拿来做测试即可。
2. 用Qt Creator新建一个工程
例程如下:C:\MATLAB\R2014a\extern\examples\eng_mat\engdemo.c
3. 程序编译后,运行结果如图3,会打开一个matlab command window,并绘图
图3 程序运行结果
Matlab engine API介绍
这里不做过多重复介绍,给出几个参考地址吧
1. MATLAB Engine API介绍:http://blog.sina.com.cn/s/blog_67d069a90100q37c.html
2. MATLAB Engine API for C,C++,and Fortran:http://cn.mathworks.com/help/matlab/calling-matlan-engine-from-c-c-and-fortran-programs.html
其它问题
1. Matlab mcc不可用
如果程序编译通过,运行matlab时无法加载,可能是matlab的破解不够彻底,可以到网上找一下破解包,关于matlab编译器mcc的破解。直接给出下载地址:
链接:http://pan.baidu.com/s/1gdzNBxx
密码:jqm5
2. QT编译器会比较丰富,之前用的不是msvc2013的64位编译器,编译时无法载入库文件,问题产生的原因是用了32位的编译器调了64位matlab的库文件,这个不兼容,解决办法有两个,要么编译器和matlab都用32位,要么都用64位,我选择了后者。编译出来的应用也是对应的32位和64位
3. QT应用发布时,打开exe文件,可能提示缺少dll文件,有两个解决办法
a)针对编译此应用的计算机而言,将所依赖的dll文件所在的目录添加到环境变量中,通常都在这个目录下“C:\Qt\Qt5.4.2\5.4\msvc2013_64\bin”。
b)针对没有安装QT的其它计算机而言,需要将所依赖的dll文件都复制到exe文件的根目录下即可。
4. 解决1的问题后,对于提示缺少matlab的dll文件,方法与1类似,但前提是等运行应用的计算机上需要提前安装matlab,否则没有matlab engine