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语言文件操作)

    c语言文件读写示例(c语言文件操作)

    这篇文章主要介绍了c语言文件读写示例(c语言文件操作),需要的朋友可以参考下
    2014-02-02
  • C++集体数据交换实现示例讲解

    C++集体数据交换实现示例讲解

    这篇文章主要介绍了C++集体数据交换实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-11-11
  • C++ namespace命名空间解析

    C++ namespace命名空间解析

    考虑一种情况,当我们有两个同名的人,Zara,在同一个班里。当我们需要对它们进行区分我们必须使用一些额外的信息和它们的名字,比如它们生活在不同的区域或者兴趣爱好什么的,在C++程序中也会遇到同样的情况,所以命名空间就此产生
    2021-11-11
  • C++带有指针成员的类处理方式详解

    C++带有指针成员的类处理方式详解

    这篇文章主要为大家详细介绍了C++带有指针成员的类处理方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • C语言链接属性的实践应用

    C语言链接属性的实践应用

    C语言中链接属性决定如何处理在不同文件中出现的标示符,下面这篇文章主要给大家介绍了关于C语言链接属性的实践应用,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • Qt物联网管理平台之实现数据查询导出打印

    Qt物联网管理平台之实现数据查询导出打印

    这篇文章主要为大家介绍了如何利用Qt编写物联网管理平台中数据查询导出打印的功能,文字的示例代码讲解详细,感兴趣的可以了解一下
    2022-07-07
  • C++中的Reactor原理与实现

    C++中的Reactor原理与实现

    reactor设计模式是event-driven architecture的一种实现方式,处理多个客户端并发的向服务端请求服务的场景,每种服务在服务端可能由多个方法组成,这篇文章主要介绍了Reactor原理与实现,需要的朋友可以参考下
    2022-07-07
  • Qt简单编程实现UDP通讯

    Qt简单编程实现UDP通讯

    UDP数据报协议是一个面向无连接的传输层报文协议,它简单易用,不存在 TCP协议“粘包”的问题,下面我们就来看看如何使用qt简单实现UDP通讯吧
    2024-04-04
  • gdb调试命令的使用及总结

    gdb调试命令的使用及总结

    gdb是一个在UNIX环境下的命令行调试工具。如果需要使用gdb调试程序,请在gcc时加上-g选项。下面的命令部分是简化版,比如使用l代替list等等
    2013-05-05
  • C++实现动态分配const对象实例

    C++实现动态分配const对象实例

    这篇文章主要介绍了C++实现动态分配const对象实例,包括了const对象的创建、删除及应用实例,需要的朋友可以参考下
    2014-10-10

最新评论