Qt调用MATLAB引擎混合编程的过程详解

 更新时间:2024年01月16日 10:06:00   作者:spic_jackmaster  
这篇文章给大家介绍了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官方文档进行查询。

以上就是Qt调用MATLAB引擎混合编程的过程详解的详细内容,更多关于Qt调用MATLAB的资料请关注脚本之家其它相关文章!

相关文章

  • C++ 算法精讲之贪心算法

    C++ 算法精讲之贪心算法

    贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解
    2022-03-03
  • C++ std::initializer_list 实现原理解析及遇到问题

    C++ std::initializer_list 实现原理解析及遇到问题

    这篇文章主要介绍了C++ std::initializer_list 实现原理勘误,本文通过源码解析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • 浅谈C++中char型变量的地址输出

    浅谈C++中char型变量的地址输出

    下面小编就为大家带来一篇浅谈C++中char 型变量的地址输出。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • VC++ 使用 _access函数判断文件或文件夹是否存在

    VC++ 使用 _access函数判断文件或文件夹是否存在

    这篇文章主要介绍了VC++ 使用 _access函数判断文件或文件夹是否存在的相关资料,需要的朋友可以参考下
    2015-10-10
  • 详解C++何时需要拷贝构造函数

    详解C++何时需要拷贝构造函数

    拷贝构造函数是一个特殊的构造函数,用于创建一个新对象,该对象与另一个同类对象具有相同的属性和值,在 C++ 中,拷贝构造函数通常采用另一个同类对象作为参数,并使用该对象初始化新对象,本文给大家讲讲何时需要拷贝函数,需要的朋友可以参考下
    2023-09-09
  • 详解C++ 桶排序(BucketSort)

    详解C++ 桶排序(BucketSort)

    这篇文章主要介绍了C++桶排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • C++获取文件大小数值的三种方式介绍

    C++获取文件大小数值的三种方式介绍

    最近在做项目时经常需要获得文件的大小操作,虽然在网络上已经有许多篇博客介绍了,但是还是想总结出自己一篇,记录一下自己在项目中是怎么获得文件大小的
    2022-10-10
  • C++中的类扩展之继承和组合详解

    C++中的类扩展之继承和组合详解

    在C++中,类扩展可以通过继承、组合和装饰模式实现。继承可以实现对已有类的修改和扩展,组合可以增加新的功能,装饰模式则能够在不改变原类的情况下为其添加新的功能。这些技术在C++程序设计中应用广泛,提高了程序的可扩展性和可维护性
    2023-04-04
  • C++在成员函数中使用STL的find_if函数实例

    C++在成员函数中使用STL的find_if函数实例

    这篇文章主要介绍了C++在成员函数中使用STL的find_if函数实例,包括了STL中find_if函数的具体用法及相关的完整实例,非常具有参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • C语言中free函数的使用详解

    C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下
    2017-05-05

最新评论