Qt調(diào)用MATLAB引擎混合編程的過程詳解
0、前言
C/C++調(diào)用MATLAB有三個方式:調(diào)用dll文件、調(diào)用exe可執(zhí)行程序和調(diào)用Engin引擎。
第一種方式利用MATLAB Coder 將MATLAB代碼生成C/C++代碼和相關(guān)動態(tài)鏈接庫,可以在沒有MATLAB的電腦和設(shè)備上運行。
第二種方式利用MATLAB將MATLAB代碼編譯成exe可執(zhí)行文件,由C/C++調(diào)用exe從而實現(xiàn)混合調(diào)用,需要在執(zhí)行機上安裝MCR運行環(huán)境, MATLAB Component Runtime,MCR。
第三種方式直接調(diào)用MATLAB計算引擎,相當于進程調(diào)用,后臺開一個MATLAB應(yīng)用,通過C API傳參數(shù)和接收MATLAB的返回結(jié)果,需要安裝MATLAB。
1、環(huán)境配置
Qt調(diào)用matlab引擎需要二者的軟件位數(shù)一致。本文實現(xiàn)的環(huán)境如下:
- Qt 6.2.1 64bit
- matlab 2018b 64bit
- MinGW64 版本mingw810_64
1.1 MATLAB配置C編譯器
配置MATLAB的C編譯器與Qt的C編譯器為同一個MinGW,如果沒有MinGW則需要去下載。由于安裝Qt過程中選擇了MinGW,因此,MATLAB直接配置該MinGW??梢耘R時設(shè)置MinGW環(huán)境變量,但是關(guān)閉MATLAB后該變量就消失了,下次啟動MATLAB需要重新設(shè)置。
setenv('MW_MINGW64_LOC','D:\Tools\Qt_6.2.0_64Bit\Qt\Tools\mingw810_64')
可以通過設(shè)置系統(tǒng)環(huán)境變量,下次啟動MATLAB后不用再次設(shè)置。
設(shè)置MinGW環(huán)境變量之后,可以配置MATLABd C語言編譯器,此時選擇C++。
1.2 QT配置MATLAb Engine環(huán)境
Qt項目文件Pro添加依賴Engine的依賴,包括頭文件和庫(libgeng ligmat libmx ligmex等),比較簡單。
如果MATLAB的路徑中有空格,例如C:/Program Files之類的,需要用到 $$quote處理。
2、測試
以下示例展示Qt調(diào)用MATLAb引擎繪制一個sin函數(shù)。
如果編譯成功但是執(zhí)行崩潰,則可能是沒有找到相應(yīng)的MATLAB(添加一個matlab的bin下邊的win64目錄,例如:D:\Tools\matlab2018b\bin\win64),此時系統(tǒng)環(huán)境變量中添加或者在QT項目中添加。
QT中添加環(huán)境變量如下:
系統(tǒng)環(huán)境變量添加方法如下:
可能會出現(xiàn)執(zhí)行交慢的情況,已經(jīng)打開的MATLAB Command Window不要關(guān)閉,下次啟動就會更快一些。以上是簡單的引擎測試,數(shù)據(jù)傳遞和接收可以根據(jù)MATLAB官方文檔進行查詢。
以上就是Qt調(diào)用MATLAB引擎混合編程的過程詳解的詳細內(nèi)容,更多關(guān)于Qt調(diào)用MATLAB的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++集體數(shù)據(jù)交換實現(xiàn)示例講解
這篇文章主要介紹了C++集體數(shù)據(jù)交換實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-11-11Qt物聯(lián)網(wǎng)管理平臺之實現(xiàn)數(shù)據(jù)查詢導(dǎo)出打印
這篇文章主要為大家介紹了如何利用Qt編寫物聯(lián)網(wǎng)管理平臺中數(shù)據(jù)查詢導(dǎo)出打印的功能,文字的示例代碼講解詳細,感興趣的可以了解一下2022-07-07