Ubuntu 22.04 编译安装 Qt mysql驱动

本文详细描述了在Ubuntu22.04系统上,针对Qt5.15.2版本如何解决因找不到libmysqlclient.so而无法加载MySQL驱动的问题,包括安装依赖、定位库文件、修改配置并进行编译的过程。
摘要由CSDN通过智能技术生成

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

系统版本

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 肯定要先安装上, 我安装的是

mysql  Ver 8.0.35-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))

然后安装依赖库

sudo apt install libmysqlclient-dev
// 不然找不到 usr/include/mysql 文件

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

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

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

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

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 行的代码直接注释掉
然后添加两行代码, 这两行代码根据你安装的目录确定

INCLUDEPATH += /usr/include/mysql
LIBS += -L/usr/lib/x86_64-linux-gnu -lmysqlclient

例如我的
(1) 执行命令 whereis mysql

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

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 行代码即可
在这里插入图片描述
4. 在 /home/rain/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/mysql 目录下, 打开终端, 执行如下代码

 /home/rain/Qt/5.15.2/gcc_64/bin/qmake mysql.pro
 // 注意 rain是当前的用户名, 路径也是根据你自己安装的Qt路径来

5.然后mysql源码文件夹里多了个 MakeFile
在这里插入图片描述
然后 makemake install

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 模块

#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();         
    }                                                                    
}                                                                        

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值