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

本文主要是介绍linux(ubuntu18.04.2) Qt编译 MySQL(8.0以上版本)链接库 Qt版本 5.12.12及以上 包含Mysql动态库缺失问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

一、搭建开发环境:

  • 虚拟机(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参考文档

这篇关于linux(ubuntu18.04.2) Qt编译 MySQL(8.0以上版本)链接库 Qt版本 5.12.12及以上 包含Mysql动态库缺失问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/948223

相关文章

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.