Qt 调用MATLAB引擎混合编程

0、前言

C/C++调用MATLAB有三个方式:调用dll文件、调用exe可执行程序和调用Engin引擎。

第一种方式利用MATLAB Coder 将MATLAB代码生成C/C++代码和相关动态链接库,可以在没有MATLAB的电脑和设备上运行。

第二种方式利用MATLAB将MATLAB代码编译成exe可执行文件,由C/C++调用exe从而实现混合调用,需要在执行机上安装MCR运行环境, MATLAB Component Runtime,MCR。

第三种方式直接调用MATLAB计算引擎,相当于进程调用,后台开一个MATLAB应用,通过C API传参数和接收MATLAB的返回结果,需要安装MATLAB。

1、环境配置

Qt调用matlab引擎需要二者的软件位数一致。本文实现的环境如下:

  • 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。可以临时设置MinGW环境变量,但是关闭MATLAB后该变量就消失了,下次启动MATLAB需要重新设置。

setenv('MW_MINGW64_LOC','D:\Tools\Qt_6.2.0_64Bit\Qt\Tools\mingw810_64')

可以通过设置系统环境变量,下次启动MATLAB后不用再次设置。

设置MinGW环境变量之后,可以配置MATLABd C语言编译器,此时选择C++。

 1.2 QT配置MATLAb Engine环境

Qt项目文件Pro添加依赖Engine的依赖,包括头文件和库(libgeng ligmat libmx ligmex等),比较简单。

如果MATLAB的路径中有空格,例如C:/Program Files之类的,需要用到 $$quote处理。

2、测试

以下示例展示Qt调用MATLAb引擎绘制一个sin函数。

如果编译成功但是执行崩溃,则可能是没有找到相应的MATLAB(添加一个matlab的bin下边的win64目录,例如:D:\Tools\matlab2018b\bin\win64),此时系统环境变量中添加或者在QT项目中添加。

QT中添加环境变量如下:

系统环境变量添加方法如下:

 

 

可能会出现执行交慢的情况,已经打开的MATLAB Command Window不要关闭,下次启动就会更快一些。以上是简单的引擎测试,数据传递和接收可以根据MATLAB官方文档进行查询。用于 C 的 MATLAB 引擎 API- MATLAB & Simulink- MathWorks 中国

 以下无。

  • 9
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
Qt调用MATLAB引擎有多种方式。一种常见的方式是将MATLAB函数封装成.dll文件,然后在Qt平台上调用.dll文件实现。另一种方式是将MATLAB函数导出成.exe可执行程序,再在Qt平台上调用.exe可执行程序。还有一种方式是直接在Qt平台上调用MATLAB Engine引擎,但这需要计算机上安装有MATLAB软件。\[1\] 在进行Qt调用MATLAB引擎的过程中,可能会出现执行交慢的情况。为了提高执行速度,建议不要关闭已经打开的MATLAB Command Window,下次启动时会更快一些。具体的数据传递和接收方法可以参考MATLAB官方文档。\[2\] 要在Qt平台上实现C/C++调用MATLAB函数的全流程,需要进行环境配置,并将MATLAB代码转换成C/C++代码和相关动态链接库。具体的步骤包括:基本调用方式介绍、环境配置、将MATLAB程序写成函数形式、配置MATLAB的C编译器,将.m文件转换成动态链接库、在Qt中添加MATLAB的依赖库和头文件搜索路径、在Qt中添加外部库、在Qt工程的头文件中添加生成的MATLAB库的头文件、在Qt中编写使用DLL内函数的代码等。如果在实施过程中遇到问题,可以参考相关文档进行解决。\[3\] #### 引用[.reference_title] - *1* *3* [超详细基于Qt平台实现C/C++调用Matlab函数全流程](https://blog.csdn.net/m15279530607_163/article/details/129471386)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Qt 调用MATLAB引擎混合编程](https://blog.csdn.net/u010058695/article/details/121682716)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值