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