linux(ubuntu18.04.2) Qt编译 MySQL(8.0以上版本)链接库 Qt版本 5.12.12及以上 包含Mysql动态库缺失问题

news2024/10/6 17:22:06

整理这篇文档的意义在于:自己走了很多弯路,淋过雨所以想为别人撑伞,也方便回顾,仅供参考

一、搭建开发环境:

  • 虚拟机(ubuntu-20.04.6-desktop-amd64):
  • Mysql数据库 8.0.36
  • Workbench (mysql-workbench-community_8.0.29-1ubuntu20.04_amd64.deb)
  • QT 5.12.12(qt-opensource-linux-x64-5.12.12.run)

其中,Mysql版本已经不支持8.0.29,在考察了兼容性之后,选择使用8.0.36:(不同版本地址)
在这里插入图片描述

为了提升速度,需要先换源:源链接

二、QT - QT5.12.12 连接并操作MySQL8.0:

加粗样式搭建开发环境是对整体项目环境的一种了解手段,镜像资源丰富、难度不大,但非常浪费时间。

​我整理了网上比较靠谱的资料,我照着复现过一遍,文档整理如下:

  • 安装 VMware Workstation Pro 16 并创建 ubuntu 20.04 虚拟机

  • 历史版本

  • ubuntu20.04安装MySQL以及MySQL-workbench

  • Ubuntu20.04中Qt5.12.12安装

  • 缺失的库

1、数据库连接

在Qt5版本之后,常见的问题是动态库缺失,即mySql需要完成编译工作

情况分析:连接Mysql失败,实例化打印出来:

QStringList list = QSqlDatabase::drivers();
qDebug()<<list;

打印结果表示缺少Mysql动态库:在这里插入图片描述
我一开始的思路:

  • 不支持动态库了 5以上多个版本是不支持的,6以上全部不支持
  • 支持但安装时漏掉了

2、求助官方文档(文档链接):

原话如下:

How to Build the QMYSQL Plugin on Unix and macOS?

You need the MySQL / MariaDB header files, as well as the shared
library libmysqlclient.so / libmariadb.so. Depending on your Linux
distribution, you may need to install a package which is usually
called “mysql-devel” or “mariadb-devel”.

Tell qmake where to find
the MySQL / MariaDB header files and shared libraries (here it is
assumed that MySQL / MariaDB is installed in /usr/local) and run
make:

eg:

mkdir build-sqldrivers
cd build-sqldrivers
qt-cmake -G Ninja <qt_source_directory>/qtbase/src/plugins/sqldrivers -DCMAKE_INSTALL_PREFIX=<qt_installation_path>/<platform> -DMySQL_INCLUDE_DIR="/usr/local/mysql/include" -DMySQL_LIBRARY="/usr/local/mysql/lib/libmysqlclient.<so|dylib>"
cmake --build .
cmake --install .

难点:

  • 过往有简单的Cmake经验,通常是配置Cmakelists文件:我之前配置Cmake的心得,在这里没能完全理解文档的意思

  • 开始思路不清晰,不确定是整体库缺失,需要安装mysql-devel,还是单纯缺失libmysqlclient,需要单独下载。

最终的方法(实测没问题):

  1. 安装命令:sudo apt-get install libmysqlclient-dev

  2. 配置文件(主要标注的是需要改动的部分,其余内容不要修改):

    mysql.pro:

    #QMAKE_USE += mysql
    

    qsqldriverbase.pri:

    QT  = core core-private sql-private
    
    #include($$shadowed($$PWD)/qtsqldrivers-config.pri)
    include($$shadowed($$PWD)/configure.pri)
    
    PLUGIN_TYPE = sqldrivers
    load(qt_plugin)
    
    DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
    

    3、make生成动态库:libqsqlpsql.so

    4、拷贝移动到Qt的数据库驱动:sqldrivers中即可
    效果图如下:
    在这里插入图片描述
    在这里插入图片描述
    最终验证也是实现了想要的效果:
    在这里插入图片描述

总结

Qt连接到mysql的过程:app->Qt的数据库插件->mysql动态库->mysql服务

补充说明(Windows道理一样)

How to Build the QMYSQL Plugin on Windows

You need to get the MySQL installation files (e.g. mysql-installer-web-community-8.0.18.0.msi) or mariadb-connector-c-3.1.5-win64.msi. Run the installer, select custom installation and install the MySQL C Connector which matches your Qt installation (x86 or x64). After installation check that the needed files are there:

Win参考文档

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

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

相关文章

pytorch库 01 安装Anaconda、Jupyter,Anaconda虚拟环境连接pycharm

文章目录 一、安装Anaconda1、卸载Anaconda&#xff08;可选&#xff09;2、下载并安装Anaconda3、配置环境变量4、桌面快捷方式 二、安装 PyTorch&#xff08;GPU 版&#xff09;库1、创建虚拟环境&#xff0c;并安装一些常用包2、GPU 基础3、检查驱动4、安装CUDA&#xff08;…

数字化转型新篇章:企业通往智能化的新范式

早在十多年前&#xff0c;一些具有前瞻视野的企业以实现“数字化”为目标启动转型实践。但时至今日&#xff0c;可以说尚无几家企业能够在真正意义上实现“数字化”。 在实现“数字化”的征途上&#xff0c;人们发现&#xff0c;努力愈进&#xff0c;仿佛终点愈远。究其原因&a…

Springboot+Vue项目-基于Java+MySQL的校园外卖服务系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

企业营销战略新思考:营销5.0与开源AI智能名片S2B2C商城小程序引领私域流量经营新纪元

随着互联网的深入发展&#xff0c;企业营销战略已经不再是单一、静态的规划&#xff0c;而是一个持续进化、与市场紧密相连的动态过程。在这个过程中&#xff0c;营销5.0和开源AI智能名片S2B2C商城小程序的结合&#xff0c;为企业营销战略注入了新的活力&#xff0c;也为私域流…

EasyRecovery数据恢复软件2025永久免费电脑版下载

EasyRecovery数据恢复软件是一款业界知名的数据恢复工具&#xff0c;它凭借强大的恢复能力和广泛的数据兼容性&#xff0c;帮助用户从各种存储设备中恢复丢失或删除的数据。以下是关于EasyRecovery数据恢复软件的详细介绍。 EasyRecovery绿色破解下载网盘链接: https://pan.ba…

《QT实用小工具·四十七》可交互的创意动态按钮

1、概述 源码放在文章末尾 该项目实现了可交互的创意动态按钮&#xff0c;包含如下功能&#xff1a; 所有颜色自定义 鼠标悬浮渐变 两种点击效果&#xff1a;鼠标点击渐变 / 水波纹动画&#xff08;可多层波纹叠加&#xff09; 额外鼠标移入/移出/按下/弹起的实时/延迟共8种事…

2024最新版JavaScript逆向爬虫教程-------基础篇之常用的编码与加密介绍(python和js实现)

目录 一、编码与加密原理1.1 ASCII 编码1.2 详解 Base641.2.1 Base64 的编码过程和计算方法1.2.2 基于编码的反爬虫设计1.2.3 Python自带base64模块实现base64编码解码类封装 1.3 MD5消息摘要算法1.3.1 MD5 介绍1.3.2 Python实现md5以及其他常用消息摘要算法封装 1.4 对称加密与…

在kuboard中添加k8s集群

1.登录kuboard后&#xff0c;点击添加集群面板 系统会跳转到k8s集群添加页面&#xff0c;按照页面提示输入自身的集群信息即可&#xff0c;此处没有什么难点。 添加成功后&#xff0c;点击集群面板&#xff0c;然后点击集群概要信息&#xff0c;就可以查看集群节点信息。 集群节…

mac配置maven

在 macOS 上配置 Maven 也相对简单。以下是一种常用的方法&#xff1a; 1. 安装maven **下载 Maven&#xff1a;**首先&#xff0c;你需要从 Maven 官网&#xff08;https://maven.apache.org/download.cgi&#xff09;下载最新版本的 Maven。你可以选择二进制压缩包&#xf…

ctfshow web78 获取flag(用老版的火狐浏览器)

题&#xff1a; 第一种&#xff1a;利用input伪协议 ,获取到flag ?filephp://input POST data <?php system(tac ls) ?> 第二种&#xff1a;利用flter协议,获取到flag https://21d9e58a-c0fd-47ea-a9c4-d875100f2fdb.challenge.ctf.show/?filephp://filter/readcon…

Java网址url工具类

功能描述 无需引入三方依赖文本匹配网址&#xff08;支持多个&#xff09;网址解析&#xff08;包括协议、主机、路径、参数等&#xff09; package com.qiangesoft.image.utils;import org.springframework.util.Assert; import org.springframework.util.CollectionUtils;i…

使用 Wireshark 实现 ARP 嗅探监听网络

前言 Wireshark是一个开源的网络协议分析工具&#xff0c;用于捕获和分析网络数据包。它可以在多个操作系统上运行&#xff0c;并提供了强大的功能和用户友好的界面。 通过Wireshark&#xff0c;用户可以捕获网络流量&#xff0c;并对其进行深入的分析。它支持多种协议的解析…

Unity 合并子物体获得简化Mesh

合并子物体获得简化Mesh &#x1f959;环境&#x1f96a;Demo &#x1f959;环境 PackageManager安装Editor Coroutines 导入插件&#x1f448; &#x1f96a;Demo 生成参数微调&#xff1a;Assets/EasyColliderEditor/Scripts/VHACDSettings/VHACDSettings.asset

大数据开发工作中的数仓设计(Hadoop,hive ,mysql )

1.HUE工具介绍使用 HUE是CDH提供一个hive和hdfs的操作工具&#xff0c;在hue中编写了hiveSQl也可以操作hdfs的文件 http://主机名字:端口号 hdfs的web访问端口 http://主机名字:端口号 hdfs的程序访问端口 进入后确保hdfs hive yarn 开启 在点击hue开启 在这里面也可以进行h…

android studio拍照功能问题解决

1.点击拍照功能直接闪退 2.拍照后不能选择确认键&#xff0c;无法保存 上述是在android studio做项目中经常会使用到模拟器或真机的拍照功能时主要遇到的两个问题。 解决方法&#xff1a; 1.直接闪退问题&#xff1a; if(Build.VERSION.SDK_INT>Build.VERSION_CODES.N)…

【HTML植物大战僵尸源码】

HTML植物大战僵尸源码 效果图部分源码领取源码下期更新预报 效果图 部分源码 index.html <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> <meta name"KeyWords" content"lonelys…

Vue3 + TS 项目实战 - 后台管理系统 - 按钮权限

前期回顾 网站的打赏 —— 新一代的思路-CSDN博客https://blog.csdn.net/m0_57904695/article/details/136704914?spm1001.2014.3001.5501 目录 &#x1f6a9; XX银行_系统管理_按钮权限控制_前端_提测单 项目信息 提测版本信息 功能列表 测试范围 测试环境 ✅ 步…

05-MessageConverter和ControllerAdvice

准备对象 Data static class User {private String name;private int age;JsonCreator // 默认jackson会使用无参构造器反序列化 这里强制使用当前带参构造器public User(JsonProperty("name") String name, JsonProperty("age") int age) {this.name …

《21天学通C++》(第十一章)多态

为什么需要多态&#xff1f; 为了最大限度地减少代码&#xff0c;提高可读性 1.虚函数 虚函数是C中的一种特殊成员函数&#xff0c;它允许在派生类&#xff08;也称为子类&#xff09;中重写&#xff08;覆盖&#xff09;基类的实现&#xff0c;使用virtual进行声明 在C中&am…

包装类的基础知识

JAVA 是面向对象编程的 但是基本数据类型没有对象的 基本数据类型 byte------>>Byte short------>>Short int------>>Integer long------>>long char------>>Character double------>>Double boolean------>>Boolean 包装类…