qt调用matlab生成的dll库

news2024/10/5 19:17:00

最近由于在项目中要用到matlab的算法,而用C++转换matlab算法非常麻烦,所以采用qt+matlab混合编程的方法,在使用中遇到了些许问题,特记录如下。

一、生成matlab库

1、首先需要下载matlab完整版,之前在网上下载的简版,发现在调用过程中缺失很多头文件信息。

        下载安装完成后,需要先配置mingw编译器,采用setenv('MW_MINGW64_LOC','C:\Qt\Qt5.14.2\Tools\mingw730_64')命令配置,由于安装qt时已存在mingw编译器,所以可以直接使用qt下的mingw编译器,由于matlab一般是64位,所以需要使用64位的mingw。

mingw配置完成后,需要配置c++编译器,调用mbuild -setup命令

 选择mingw64 Compiler + mex -setup C++ -client MBUILD选项

2、创建matlab文件

 3、在命令行中输入deploytool命令,选择Library Compiler选项

选择C++ Shared Library,点击右侧加号按钮,选中需要生成dll库的源文件,最后点击Package选项生成dll文件

在for_redistribution_files_only文件夹下可以看到生成的dll文件,拷贝*.dll、*.h文件到qt工程目录下

 

 至此,dll库制作完成 

二、qt加载matlab库

1、首先在pro文件中需要先配置matlab的依赖库及头文件信息        2、加载matlab生成的dll库

3、在qt中调用matlab函数

   

 

 编译运行,即可看到对应的结果。此处需要配置matlab的运行库环境,否则运行qt程序时会异常退出。

在matlab安装目录下,找到runtime文件,配置系统环境变量,F:\matlab2020b\runtime\win64; 

三、运行部署

目前还为发布程序,待补充,理论上,生成dll库,可能需要生成带运行环境的dll库,即在packing options下选择Runtime include in package选项。

四、总结

1、找不到mclmcrrt.h、mclcppclass.h等matlab头文件信息,主要是第一次安装的是matlab的简版,导致很多头文件信息找不到,后续替换为完整版后,结局。

2、编译链接软件时提示undefined reference ‘xxxx’,即找不到matlab生成的库函数,主要原因是matlab的编译环境没有设置为C++编译环境,导致生成函数名称不匹配。

解决此问题有2中方法:

a、通过上述步骤1,配置matlab的c++环境,重新生成dll库,编译链接解决。

b、通过vs下的dumpbin命令,查看对应dll库中的函数名称,dumpbin -exports testadd.dll

 _Z7testaddiR7mwArrayRKS_S2_及dll库中的函数名称,通过函数指针的形式进行访问调用,即显式加载dll库。

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

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

相关文章

基于C#制作一个休息提醒闹钟

> 此文主要通过WinForm来制作一个休息提醒闹钟,通过设置时间间隔进行提醒,避免沉浸式的投入到工作或者学习当中,战斗的同时也要照顾好自己。 实现流程1.1、创建项目1.2、时间间隔配置页1.3、闹钟提醒页1.4、开机自启动配置1.5、日志记录1.…

一个数据库文档生成神器

Gitee项目地址,可以直接去开源项目查看(推荐) 简介 在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有、要么有、但都是…

MySql 5.7.40备份到腾讯云cos+从cos恢复

1 备份 1.1 安装coscli # wget https://github.com/tencentyun/coscli/releases/download/v0.12.0-beta/coscli-linux # mv coscli-linux /usr/bin/coscli # chmod 755 /usr/bin/coscli # coscli --version如果github慢可以使用国内镜像: wget https://cosbrowse…

数电相关知识

文章目录 逻辑电路与或非异或 门电路与的物理电路电压比较器D型锁存器优先编码器边沿触发器RS触发器施密特触发器基本原理555定时器数电电平TTL器件CMOS器件逻辑电路 与或非异或 门电路 与乘大于1或加大于1异或异性为1,异吗? 与的物理电路

Leetcode:17. 电话号码的字母组合(C++)

目录 问题描述: 实现代码与解析: 回溯: 原理思路: 问题描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&…

【数据库】必须知道的MySQL优化

文章目录SQL语言有哪几部分组成为什么要进行MySQL优化?优化方法有哪些?SQL层面优化MySQL配置方面架构设计方面硬件和操作系统方面.SQL语言有哪几部分组成 数据定义语言,简称DDL:DROP,CREATE,ALTER等语句。数据操作语言&#xff0…

【Java|golang】2299. 强密码检验器 II

如果一个密码满足以下所有条件,我们称它是一个 强 密码: 它有至少 8 个字符。 至少包含 一个小写英文 字母。 至少包含 一个大写英文 字母。 至少包含 一个数字 。 至少包含 一个特殊字符 。特殊字符为:“!#$%^&*()-” 中的一个。 它 不…

VMware 安装 OpenWrt 旁路由并配置 PassWall

准备 OpenWrt 镜像包,本例使用的是在恩山论坛上面下载的https://www.right.com.cn/forum/thread-8271618-1-1.html网络选择 NAT 模式创建虚拟机一直下一步至一直下一步至,这里选择 NAT 方式一直下一步至,这里选择“使用现在虚拟磁盘”&#x…

高并发系统设计 -- 粉丝关注列表如何设计

粉丝关注列表如何设计和落地 业务场景 上图我们简称relation页。relation页展示用户的关系相关信息,包含两个子页面: follower页,展示关注该用户的所有用户信息。attention页,展示该用户关注的所有用户信息 主要操作 用户可以…

数论之欧拉筛法(含朴素筛选、埃式筛选详细代码)

文章目录前言朴素筛法(纯暴力,O(n^2^))埃式筛法(找出合数来确认质数, O(n*log(logn)))欧拉筛法(线性筛选,O(n))参考文章前言 在学习Acwing c蓝桥杯辅导课第八讲数论-1295. X的因子链…

Linux常用命令——tcpdump命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) tcpdump 一款sniffer工具,是Linux上的抓包工具,嗅探器。 补充说明 tcpdump命令是一款抓包,嗅探器工具,它可以打印所有经过网络接口的数据包的头信息,…

【MySQL】CentOS7 卸载以及安装 MySQL 详细流程

一、卸载 MySQL 查看 MySQL 安装版本 mysqladmin --version通过 rpm 查找 MySQL rpm -qa|grep -i mysql查看 MySQL 运行状态 systemctl status mysqld.service关闭 MySQL 服务 systemctl stop mysqld.service通过 yum remove 删除 MySQL 安装包 把上面所有的安装包挨个删除…

用友U8和旺店通·企业奇门单据接口对接

对接系统旺店通企业奇门旺店通是北京掌上先机网络科技有限公司旗下品牌,国内的零售云服务提供商,基于云计算SaaS服务模式,以体系化解决方案,助力零售企业数字化智能化管理升级。为零售电商企业的订单管理及仓储管理提供解决方案&a…

Java寒假作业——编程题

二、编程题(ACM模式)1-2题1 (2022蚂蚁金服)一个字母可以拆分成两个字母表顺序的前一个字母,例如,b可以拆分成aa,c可以拆分成bb。打印出最短的可以拆分成 K 个 a 的字符串,字母顺序无…

Spring的三种装配机制(XML、JavaConfig、自动装配)

Spring中bean有三种装配机制一、在xml中显示装配二、 在java中显式装配&#xff0c;都需要在Config配置类重写三、自动装配1. xml方式自动装配2. 使用注解装配等于依赖关系注入&#xff0c;即一个Bean作为属性&#xff0c;装配到另一个Bean。 一、在xml中显示装配 <!--1. …

GCC是什么

GCC是什么 说到 GCC&#xff0c;就不得不提 GNU&#xff0c;“GNU”是“GNUs Not Unix!”&#xff08;GNU并非Unix&#xff01;&#xff09;的首字母递归缩写&#xff0c;中文名“革奴计划”。GNU 计划的最终目标是打造出一套完全自由&#xff08;即自由使用、自由更改、自由发…

Java基础之《netty(28)—TCP粘包拆包原理》

一、基本介绍 1、TCP是面向连接的&#xff0c;面向流的&#xff0c;提供高可靠性服务。收发两端&#xff08;客户端和服务器端&#xff09;都要有一一成对的socket&#xff0c;因此&#xff0c;发送端为了将多个发给接收端的包&#xff0c;更有效的发给对方&#xff0c;使用了…

C++语法复习笔记-第6章 c++指针

文章目录1. 计算机内存1. 储存层次2. 内存单元与地址3. 指针定义2. 左值与右值1. 数组与指针1. 概念3. C中的原始指针1. 数组指针与指针数组2. const pointer 与 pointer to const3. 指向指针的指针4.关于野指针4.1 指向指针的指针4.2 NULL指针4.3 野指针5. 指针的基本运算5.1 …

MySQL 批量插入

文章目录MySQL批量插入10w条数据创建表创建函数创建存储过程调用存储过程MySQL批量插入10w条数据 创建表 创建emp&#xff08;部门&#xff09;表 创建dept&#xff08;员工&#xff09;表 创建函数 创建rand_num函数&#xff0c;随机生成部门编号&#xff0c;保证部门编…

Spark RDD算子

文章目录Spark RDD算子一、RDD 转换算子1、Value 类型(1) mapSpark RDD算子 RDD 方法也叫做RDD算子&#xff0c;主要分为两类&#xff0c;第一类是用来做转换的&#xff0c;例如flatMap()&#xff0c;Map()方法&#xff0c;第二类是行动的&#xff0c;例如&#xff1a;collenc…