超详细基于Qt平台实现C/C++调用Matlab函数全流程

这篇具有很好参考价值的文章主要介绍了超详细基于Qt平台实现C/C++调用Matlab函数全流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 基本调用方式介绍

基于Qt平台实现C/C++调用Matlab函数有三种方式:(1)将Matlab函数封装成.dll文件,再在Qt平台上调用.dll文件实现;(2)将Matlab函数导出成.exe可执行程序,再在Qt平台上调用.exe可执行程序;(3)直接在Qt平台上调用Matlab Engin引擎,这种方法需要计算机上安装有Matlab软件。
本文是通过第一种方式,将MATLAB代码转成C/C++代码和相关动态链接库进行实现的,其他两种方式具体可以参考:
Qt调用MATLAB引擎混合编程

2. 环境配置

QT调用matlab需要编译器位数一致!!!!!!!不然会出现函数未定义等错误。

  1. QT 5.14.2
  2. MATLAB2020b
  3. MinGW64

3. 将Matlab程序写成函数形式

qt matlab,matlab,qt,c语言
在matlab中尝试调用一下看是否正确

4. Matlab配置C编译器,将.m文件转换成动态链接库

配置MATLAB的C编译器与Qt的C编译器为MinGW。可以临时设置MinGW环境变量,但是关闭MATLAB后该变量就消失了,下次启动MATLAB需要重新设置。

4.1 首先检查mcc编译器是否可用

命令行输入:

>>!mcc

正常结果如下:
qt matlab,matlab,qt,c语言

4.2 在Matlab命令行分别输入

mbuild -setup,选择mex -setup C++ -client MBUILD

qt matlab,matlab,qt,c语言

mex –setup,选择C++

qt matlab,matlab,qt,c语言

需要注意的是,matlab每次重启后,都要重新按以上步骤进行mbuild -setup/mex -setup的配置。

4.3 导出动态链接库

qt matlab,matlab,qt,c语言
qt matlab,matlab,qt,c语言
qt matlab,matlab,qt,c语言

5. Qt调用

5.1 在pro文件中添加matlab其他依赖库和头文件搜索路径

INCLUDEPATH += D:/Matlab_2020_anzhuang/extern/include
INCLUDEPATH += D:/Matlab_2020_anzhuang/extern/include/win64
LIBS += D:/Matlab_2020_anzhuang/extern/lib/win64/mingw64/libeng.lib
LIBS += D:/Matlab_2020_anzhuang/extern/lib/win64/mingw64/libmat.lib
LIBS += D:/Matlab_2020_anzhuang/extern/lib/win64/mingw64/libmx.lib
LIBS += D:/Matlab_2020_anzhuang/extern/lib/win64/mingw64/libmex.lib
LIBS += D:/Matlab_2020_anzhuang/extern/lib/win64/mingw64/mclmcr.lib
LIBS += D:/Matlab_2020_anzhuang/extern/lib/win64/mingw64/mclmcrrt.lib
(根据自己MATLAB安装位置来修改)

5.2 在pro文件中添加外部库

在工程文件上右键,选择添加库
qt matlab,matlab,qt,c语言
qt matlab,matlab,qt,c语言
点击浏览选择库,之后勾掉Linux和Mac,且勾掉为debug版本添加’d’作为后缀。
qt matlab,matlab,qt,c语言
点击下一步,会发现你的.pro文件中多了几行:

win32: LIBS += -L$$PWD/./ -ldetect_anomaly_11
INCLUDEPATH += $$PWD/.
DEPENDPATH += $$PWD/.

5.3 在工程的头文件中添加生成的matlab库的头文件

qt matlab,matlab,qt,c语言

6. 在Qt中编写使用DLL内函数代码

  1. DLL初始化
  2. 函数的输入输出参数
    mwArray是MATLAB的数组类,MATLAB编译生成的DLL的接口函数的参数都是采用mwArray类型。
    在调用时,需要将输入输出参数用到的mwArray定义,才能使用。
  3. mwArray类使用
    参考:mwArray类使用

7. 遇到问题及解决

参考问题解决文章来源地址https://www.toymoban.com/news/detail-810946.html

到了这里,关于超详细基于Qt平台实现C/C++调用Matlab函数全流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT调用glog日志流程

    glog日志库是Google开源的轻量级的日志库,平时在开发过程中经常要使用到日志,本篇记录Qt项目使用glog日志库的记录。 1.首先下载cmake,Download | CMake 安装设置环境变量,检查安装情况 2.下载glog源码 github网站比较慢,而且容易断线,可以用国内的境像 git clone https://gitee.com/

    2024年02月12日
    浏览(35)
  • 基于VC环境下调用MATLAB实现数字图像处理(附上完整源码+图像+说明)

    在VC环境下调用MATLAB实现数字图像处理是一种常见且有效的方法。下面将介绍如何在VC环境下调用MATLAB实现数字图像处理的步骤。 首先,确保你已经安装了MATLAB和Visual Studio,并且已经将它们正确配置。确保你已经安装了MATLAB的编译器支持包(MATLAB Compiler Runtime或MCR)。 在Vis

    2024年02月15日
    浏览(30)
  • Matlab实现ADF检验,adftest函数使用详细说明(看完就会用)

    ADF检验全称为Augmented Dickey-Fuller test。通常在使用时间序列模型(如ARMA,ARIMA)的时候用于检验时间序列数据的平稳性。他主要通过检验数据是否有单位根判断序列是否平稳。 输入参数: y:进行检验的时间序列 输出参数: h:检验结果 h = 0,说明序列不平稳; h = 1,说明序列

    2023年04月24日
    浏览(34)
  • Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)

    本文主要讲解CAPL语言里是如何实现TCP连接通信的,所以在本文开始前需要一些前期准备。 1、 首先是需要了解TCP的报文格式,连接三次握手,断开连接四次挥手的相关知识,推荐以下两位博主文章。 深入浅出TCP三次握手 (多图详解) 两张动图-彻底明白TCP的三次握手与四次

    2024年02月07日
    浏览(180)
  • ARM64函数调用流程分析

    ARM64 程序调用标准 下图是介绍一个简单函数调用的示例,在该示例中简单介绍了栈的使用。 2.1.1 main的C代码实现 2.1.2 main函数对应汇编及其分析 0000000000000114 main: main函数的入口 114: a9be7bfd stp x29, x30, [sp, #-32]! 将sp = sp - 32,为main函数开一个32Byte的栈空间,然后将x29(FP),X30(LR)寄

    2024年02月11日
    浏览(32)
  • 基于Java企业客户信息反馈平台详细设计和实现

    博主介绍 : ✌ 全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作 ✌ 主要内容: SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P

    2024年01月24日
    浏览(29)
  • 基于SpringBoot音乐网站与分享平台详细设计和实现

    博主介绍 : ✌ 全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流 ✌ 主要内容: SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P

    2024年01月19日
    浏览(30)
  • Matlab之智能优化算法函数调用

    目录 1.句柄函数 2.遗传算法 3.粒子群算法 4.模拟退火 1.句柄函数         句柄函数即我们要求的目标函数,以下三种算法的调用仅是求解最小值,若要求目标函数的最大值,可在返回结果中加负号。 句柄函数图像:                          画图代码: 2.遗传算

    2024年02月10日
    浏览(29)
  • Qt调用Python详细过程

      本文福利, 莬 费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击 莬 费领取↓↓ 编写Python代码,

    2023年04月11日
    浏览(34)
  • matlab重名函数调用踩坑记录

    我新安装了matlab的robotics toolbox,然而调用的 rotx 不是我想要的函数。 我上网查了一下资料,知乎和csdn有相关的回答,但是我试了一下还是不行。它们的方法是移除路径再添加路径避免函数的冲突。相关方法放在文末的相关参考 1 2 。 这里建议先用一下相关参考的方法,如果

    2024年02月16日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包