【Matlab】Qt Matlab混合编程——以曲线拟合为例

本文介绍了在Qt应用中调用Matlab复杂算法的方法。先说明了通过公共内存和生成C++链接库两种交互方式,重点讲解后者。详细阐述了Matlab C++链接库的生成,包括编译器配置、函数编写与编译,还介绍了在Qt工程中使用该链接库的步骤,如工程建立、程序编写和运行测试。

一、概要

在编写Qt应用时,若想用到比较复杂的算法,如拟合、FFT等,没有现成的C/C++库。而这些在Matlab中都是很容易实现的,那么有没有一种方法可以让Qt“不劳而获”得调用Matlab的算法呢?
其实方法有两种:
1. 对于不同编程语言,完全可以通过【公共内存】的方式实现交互,这类似于进程间通讯。简单来说,可以Qt与Matlab共同读写同一文件,比如Qt将原始数据放入文件,Matlab检测到后对原始数据进行计算,然后将结果放到这个文件中供Qt读取。
2. Matlab的m文件可以编译为Qt可以调用的.lib .dll C++链接库,Qt加载链接库并包含头文件后,可以在C++环境下实现m文件同样的计算效果。这也是本文主要讲解的方式。

二、环境介绍

编译器:MingW64 C++
Qt:Qt5.13.0
Matlab:2018b
首先说明下为什么使用MingW64编译器。安装Qt时要选择安装MingW64,通常为了使应用程序能跨平台运行,一般选择MingW编译器来编译,而不是微软平台的MSVS。同时,Qt和Matlab混编时,若使用MSVS编译器,还需要安装VS2013等,耗费十几G硬盘空间,并且Qt使用MSVS编译器会出现各种各样的问题,不建议使用。
再说下matlab版本,实测过2018b和2020a都可以实现混编,其实只要安装完matlab后,只要在安装目录下的bin\win64\mexopts文件夹中含有mingw64.xml即可。这在较早版本中是不支持的,如2014版本。所以想要混编最好使用2018及以上的版本。

三、Matlab C++链接库的生成

1.配置编译器

安装Qt时选了MingW64之后,在Qt的安装目录下会有mingw730_64文件夹,如

D:\Qt5.13\Tools\mingw730_64

这个文件夹就是mingw64的编译器,我们只需要配置matlab让其找到编译器即可的。
添加编译器目录到环境变量,如下图所示。
在这里插入图片描述
此时在matlab命令行中输入

mbuild -setup

就能看到mingw的编译器了。如果还不行,那么可以手动在matlab命令行中配置环境变量:

setenv('MW_MINGW64_LOC','D:\Qt5.13\Tools\mingw730_64')

之后输入mbuild -setup则会出现mingw编译器,如下所示:

>> mbuild -setup
MBUILD 配置为使用 'MinGW64 Compiler (C)' 以进行 C 语言编译。

要选择不同的语言,请从以下选项中选择一种命令:
 mex -setup C++ -client MBUILD 
 mex -setup FORTRAN -client MBUILD

因为我们要以C++编译,所以要点击下面的mex -setup C++ -client MBUILD ,之后MBUILD就被配置为mingw64 C++的编译器了,如下:

>> mbuild -setup
MBUILD 配置为使用 'MinGW64 Compiler (C)' 以进行 C 语言编译。

要选择不同的语言,请从以下选项中选择一种命令:
 mex -setup C++ -client MB
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜老越

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值