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