Ubuntu 22.04 编译安装 Qt mysql驱动

参考自
Ubuntu20.04.3 QT5.15.2 MySQL驱动编译
Ubuntu 18.04 编译安装 Qt mysql驱动

下边这篇博客不是主要参考的, 但是似乎解决了我的难题(找不到 libmysqlclient.so)
ubuntu18.04.2 LTS 系统关于Qt5.12.3 无法加载mysql驱动,需要重新编译MYSQL数据库驱动的问题以及解决方案

系统版本

cpp 复制代码
rain@rain-virtual-machine:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.3 LTS
Release:	22.04
Codename:	jammy

MySQL 肯定要先安装上, 我安装的是

cpp 复制代码
mysql  Ver 8.0.35-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))

然后安装依赖库

cpp 复制代码
sudo apt install libmysqlclient-dev
// 不然找不到 usr/include/mysql 文件

// 或者
sudo apt-get install mysql-client libmysqlclient-dev
// mysql-client是否需要安装我也不是很清楚,后续如果无法进行, 可以安装试试

可通过以下命令定位 libmysqlclient.so 的位置:

cpp 复制代码
 sudo updatedb // 更新ubuntu的文件数据库,it may take a long time
 sudo locate libmysqlclient.so

执行完后一定要能查到 libmysqlclient.so , 否则没必要继续进行操作

cpp 复制代码
rain@rain-virtual-machine:/usr/lib/x86_64-linux-gnu$ locate libmysqlclient.so
/usr/lib/x86_64-linux-gnu/libmysqlclient.so
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.21
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.21.2.35

为了查找到 libmysqlclient.so 我中间试了很多方法, 后来误打误撞执行成功了, 可能是因为执行了 sudo updatedb 或者安装了 mysql-client

下面进行正式的编译

1.首先找到QT的源码目录 , 例如 /home/rain/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/mysql

rain是你当前的用户名, 路径也是根据你自己安装的Qt路径来

版本号(我的是5.15.2)下如果没有 Src 目录, 可以考虑重装 Qt 或者更新下载 Src

2.修改 mysql.pro 文件
第 6 行的代码直接注释掉

然后添加两行代码, 这两行代码根据你安装的目录确定

cpp 复制代码
INCLUDEPATH += /usr/include/mysql
LIBS += -L/usr/lib/x86_64-linux-gnu -lmysqlclient

例如我的

(1) 执行命令 whereis mysql

cpp 复制代码
rain@rain-virtual-machine:/usr/lib/x86_64-linux-gnu$ whereis mysql
mysql: /usr/bin/mysql /usr/lib/mysql /etc/mysql /usr/include/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz

可以看到 /usr/include/mysql 路径

(2) 执行命令 locate libmysqlclient.so

cpp 复制代码
rain@rain-virtual-machine:/usr/lib/x86_64-linux-gnu$ locate libmysqlclient.so
/usr/lib/x86_64-linux-gnu/libmysqlclient.so
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.21
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.21.2.35

3.点开 pri 文件, 然后注释掉第 4 行代码即可

  1. /home/rain/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/mysql 目录下, 打开终端, 执行如下代码
cpp 复制代码
 /home/rain/Qt/5.15.2/gcc_64/bin/qmake mysql.pro
 // 注意 rain是当前的用户名, 路径也是根据你自己安装的Qt路径来

5.然后mysql源码文件夹里多了个 MakeFile

然后 makemake install

cpp 复制代码
rain@rain-virtual-machine:~/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/mysql$ make Makefile
make: "Makefile"已是最新。

rain@rain-virtual-machine:~/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/mysql$ make install Makefile
输出省略

6.然后就可以在mysql前一个目录(sqldrivers)得到一个 plugins,打开里面的 sqldrivers 有两个文件, 就标志着编译成功了

7.然后将两个文件放入编译器的 /home/rain/Qt/5.15.2/gcc_64/plugins/sqldrivers 中, 大功告成~~

测试程序

pro 里加个 sql 模块

cpp 复制代码
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>


qDebug() << QSqlDatabase::drivers();                                     
                                                                         
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");                   
db.setHostName("localhost");                                            
db.setUserName("root");                                                 
db.setPassword("1234");                                                 
db.setPort(3306);                                                       
db.setDatabaseName("mysql");                                             
                                                                        
qDebug() << (db.open() ? "open db success." : "open db failed.");                                      
                                                                         
QSqlQuery cursor;                                                        
                                                                         
QString query = " SELECT user, host FROM user; ";                        
                                                                         
if (cursor.exec(query)) {                                                
    while (cursor.next()) {                                              
        qDebug() << "user: " << cursor.value("user").toString()          
                 << "host: " << cursor.value("host").toString();         
    }                                                                    
}                                                                        
相关推荐
C吴新科3 小时前
MySQL入门操作详解
mysql
Ai 编码助手5 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
Mr.Q5 小时前
Qt多边形填充/不填充绘制
qt
白云如幻5 小时前
MySQL排序查询
数据库·mysql
苹果醋36 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
不是笨小孩i6 小时前
开源AI图片处理工具HivisionIDPhotos安装与证件照制作指南
ubuntu
可峰科技6 小时前
斗破QT编程入门系列之二:认识Qt:编写一个HelloWorld程序(四星斗师)
开发语言·qt
stars_User7 小时前
MySQL数据库面试题(下)
数据库·mysql
lihuhelihu7 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算
Yaml47 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理