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官方文档进行查询。用于 C 的 MATLAB 引擎 API- MATLAB & Simulink- MathWorks 中国

 以下无。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

caja 原理 : 前端

作为前端开放的基础安全保证,caja 是目前比较合适的运行机制,包括前端运行环境以及后端编译环境,这次先整体介绍下 caja 在前端是如何屏蔽外部模块代码对整体应用的影响 (注意:官方文档较少,以下为自己理解…

[react] 请说说什么是useImperativeHandle?

[react] 请说说什么是useImperativeHandle? // useImperativeHandle 可以让你在使用 ref 时自定义暴露给父组件的实例值。 // useImperativeHandle 应当与 forwardRef 一起使用:import React, { useImperativeHandle, forwardRef } from react import {…

xcode3.2.6升级至4.0.2经验加教训总结(转)

首先,完美运行都项目直接在Xcode4.0.2中build可能会出现这样一个错误(人品好的自觉绕道):[BEROR]No architectures to compile for (ARCHSi386, VALID_ARCHS). 首先第一反应是打开工程的Build Settings,最基本的检测&a…

扩展欧几里德问题

我们先来看这个问题 求最大公约数的gcd(m,n)方法也可以如下定义: 如果m%n为0,那么gcd(m,n)的值为n. 否则,gcd(m,n)就是gcd(n,m%n) 编写一个递归的方法来求最大公约数。编写一个测试程序,计算gcd(24,16)和gcd(255,5) 我们先引入欧几…

步步为营:Asp.Net序列化Json格式的两种方法

过去我们使用JSON.net序列化一个对象,在asp.net3.5中已经集成了序列化对象为json的方法。 我们分别针对System.Runtime.Serialization.Json和System.Web.Script.Serialization两个命名空间下的不同方法进行序列化和反序列化。 System.Runtime.Serialization.Json (在…

[react] react中setState的第二个参数作用是什么呢?

[react] react中setState的第二个参数作用是什么呢? 第二个参数是一个callback函数,用于setState设置state的属性值成功之后的回调,此时调用this.state.property可以取到刚刚设置的最新的值 个人简介 我是歌谣,欢迎和大家一起…

Qt 调用VISA库通过SCPI程控仪器-以IT8906A电子负载为例

SCPI是一种可编程仪器的标准命令,可通过 GPIB, RS232, USB, LAN接口等控制仪器功能的编程语言。 SCPI 置于 IEEE 488.2 硬件部分的顶层。相同 SCPI 命令和参数控制着不同机器的相同功能。一般标准仪器都支持SCPI协议,如…

TCP控制字段标志:URG、ACK、PSH、RST、SYN、FIN

From: http://blog.csdn.net/wangfeng2500/article/details/7650062 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段。 它们的含义是&#x…

Ubuntu 14.04 ThinkPad E431无线网卡驱动安装

Ubuntu 14.04下安装无线网卡驱动。 sudo apt-get install linux-headers-generic build-essential dkms sudo apt-get install linux-source sudo apt-get install --reinstall bcmwl-kernel-source sudo modprobe wl转载于:https://www.cnblogs.com/shoemaker/p/4800772.ht…

关于如何使用的MSCS(微软群集服务器)中的iSCSI Guest Initiators (客户机启动器)...

发布者:Dell-Terry Z 作者:戴尔公司 William U 嗨,大家好!过去的几周实在太激动人心了。第一届戴尔全球存储论坛(Dell Storage Forum)刚刚结束,我有一大堆的东西想跟大家分享,我想…

openssl版本信息和支持的命令

1、查看openssl版本 openssl version -a openssl version 可以看到版本信息和安装位置: 2、查看openssl支持的命令 openssl help Standard commands asn1parse ca ciphers cms crl crl2pkcs7 dgst …

[react] react中的setState是同步还是异步的呢?为什么state并不一定会同步更新?

[react] react中的setState是同步还是异步的呢?为什么state并不一定会同步更新? 由React控制的事件处理程序,以及生命周期函数调用setState不会同步更新state 。 React控制之外的事件中调用setState是同步更新的。比如原生js绑定的事件&…

还是FreeBSD

原文2005年4月13日写在MSN SPACE上 前几天做的FreeBSD服务器在使用过程中,流量大时会自动断线,提示如下一段话: no memory for rx buffer 一直找不出原因。今天把网卡换了,看明天是否还有错。转载于:https://blog.51cto.com/isgod…

python语法笔记(五)

1、python内存管理 (1)对象内存使用 &nsbp;&nsbp;&nsbp;&nsbp;在python中通过执行内建函数 id(obj) 可以获得对象obj在内存中的地址。在python中,整数和短小的字符,python都会缓存这些对象,以便重复使…

python实现手机号归属地相关信息查询

根据指定的手机号码,查询其归属地等相关信息,python实现: 手机号文件:test.txt 13693252552 13296629989 13640810839 15755106631 15119622732 13904446048 18874791953 13695658500 13695658547 15950179080 15573462779 15217…

[react] 请说说什么是useReducer?

[react] 请说说什么是useReducer? 基于 redux 思想实现简易数据控制流,useState 基于 reducer 实现 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关…

不被重视的基础,高效地使用ADO.net连接对象

很多初学者朋友在做项目时遇到过这样的问题,那就是在本地调试运行的程序正常,放到服务器上也是正常的,但是如果有了一些并发之后,就会发现页面会出现打不开的现像,其实大多数时候是因为Ado.net链接没有处理完善。当然对…

quick 中实现单例

直接贴代码 local danli nil local classname class("classname") function classname:getInstance() if danli nil then danli classname.new()     end return danli end return classname 使用 local duixiagn classname:getInstance()转载于:https://…

openssl创建CA并签发证书

一、创建私有CA根证书 1、创建CA目录 rootDESKTOP-JP3S3AN:/home/wsl/openssl_pro# mkdir -pv /etc/pki/CA/{private,certs,crl,newcerts} mkdir: created directory /etc/pki/CA mkdir: created directory /etc/pki/CA/private mkdir: created directory /etc/pki/CA/certs…

[react] react中的setState和replaceState的区别是什么?

[react] react中的setState和replaceState的区别是什么? setState:更新状态 replaceState:替换状态 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题