Qt5.14.2 MySQL driver not load

环境:ubuntu20.04 64位,Qt5.14.2,MYSQL8.0.22

本人新手,第一次使用qt连接mysql就报错,解决后觉得很有价值,整理一下解决过程,希望能够帮助到其他人。

​ 这个问题真的很恶心,网上找了很多解决方案,不得不说,网上的教程要凑一起看才有用。

解决方法

​ 首先看看自己Qt目录下xxx/Qt5.14.2/5.14.2/gcc_64/plugins/sqldrivers里面有没有一个叫libsqlmysql.so的库(这一步没必要,连不上的八成没有)

​ 然后需要去下载MySQL压缩包,也可以安装,我选择下载压缩包,版本与服务器上数据库版本一致(重要!!!),解压缩之后进入目录,里面有个lib,lib里有几个libmysqlclient.so.*的文件,主角就是它们或者其中一个。把这些库复制到/usr/lib/x86_64-linux-gnu中

sudo cp libmysqlclient.so.* /usr/lib/x86_64-linux-gnu

​ 为什么复制到这里呢,等会就明白了

​ 然后进入一个很深的文件夹–Qt中mysql源文件夹

​ 先进入sqldriver文件夹

cd xxx/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers

​ 修改qsqldriverbase.pri

QT  = core core-private sql-private

# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri) //注释掉

PLUGIN_TYPE = sqldrivers
load(qt_plugin)

DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

​ 然后进入mysql文件夹

cd mysql

首先编辑mysql.pro

TARGET = qsqlmysql

HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp

#QMAKE_USE += mysql		//注释掉这一句

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)

//以下为新添加内容
//INCLUDEPATH添加刚才下载的MySQL里面的include路径

INCLUDEPATH+=/home/yzk/Downloads/mysql-8.0.22-linux-glibc2.12-x86_64/include/

//LIBS添加刚才下载的MySQL里面的lib里面的.so文件(我也不知道该用哪个,就随便加了一个)

LIBS+=/home/yzk/Downloads/mysql-8.0.22-linux-glibc2.12-x86_64/lib/libmysqlclient.so.21.1.22

//这是make之后文件生成目录,我直接放在自己的家目录下,方便找,也可以直接定向到xxx/Qt5.14.2/5.14.2/gcc_64/plugins/sqldrivers

DESTDIR=/home/yzk/

修改好之后执行qmake,这里要注意,首先看看自己的全局变量qmake是什么版本的

qmake -v

在这里就有个坑,如果和Qt版本不一样的话就会报错,有一些应用可能会修改qmake路径,比如anaconda。

建议带路经选择qmake进行编译,保证不会错。

/xxx/Qt5.14.2/5.14.2/gcc_64/bin/qmake

生成makefile之后,执行make。如果之前make过,记得先把DESTDIR下的之前make出来的文件删掉再make。

将生成的.so文件复制到第一步的xxx/Qt5.14.2/5.14.2/gcc_64/plugins/sqldrivers中,然后使用ldd查看它的依赖

 $ ldd libqsqlmysql.so
 	#以上省略
	libmysqlclient.so.21 => not found
	libQt5Sql.so.5 => /lib/x86_64-linux-gnu/libQt5Sql.so.5 (0x00007f124e2bf000)
	libQt5Core.so.5 => /lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f124ddc4000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f124dda3000)
	libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f124dc1f000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f124da9c000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f124da80000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f124d8bf000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f124d8ba000)
	libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f124d5a3000)
	libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f124d50e000)
	libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f124d4f4000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f124d4e8000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f124ec48000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f124d4cb000)
	libicui18n.so.63 => /lib/x86_64-linux-gnu/libicui18n.so.63 (0x00007f124d1fd000)
	libicuuc.so.63 => /lib/x86_64-linux-gnu/libicuuc.so.63 (0x00007f124d032000)
	libpcre2-16.so.0 => /lib/x86_64-linux-gnu/libpcre2-16.so.0 (0x00007f124cfb7000)
	libdouble-conversion.so.1 => /lib/x86_64-linux-gnu/libdouble-conversion.so.1 (0x00007f124cfa0000)
	libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f124ce7f000)
	libicudata.so.63 => /lib/x86_64-linux-gnu/libicudata.so.63 (0x00007f124b48f000)
	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f124b41b000)

将显示not found的依赖,将缺失的依赖复制到/usr/lib/x86_64-linux-gnu里,依赖文件就在你下载的mysql的lib中。
我的是libmysqlclient.so.21没找到,个人认为应该是之前选择了libmysqlclient.so.21.1.22库,但是没有将它放入依赖文件夹中导致找不到,所以应该可以在编译之前把文件放入/usr/lib/x86_64-linux-gnu解决问题,但是我没有尝试。

检查依赖没有not found之后,驱动就算是打上了,回到程序。把你的工程文件里的xxx.pro_user文件删除,重新编译,就可以啦。

希望可以帮助到你。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值