目录
一、概要
在编写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

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

被折叠的 条评论
为什么被折叠?



