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

相关文章

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

nginx中端口无权限的问题解决

《nginx中端口无权限的问题解决》当Nginx日志报错bind()to80failed(13:Permissiondenied)时,这通常是由于权限不足导致Nginx无法绑定到80端口,下面就来... 目录一、问题原因分析二、解决方案1. 以 root 权限运行 Nginx(不推荐)2. 为 Nginx

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并