ubuntu18.04编译安装mysql驱动
- Linux系统下使用Qt5.12连接mysql数据库的时候,报的错误如下:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers:
"Driver not loaded Driver not loaded"
QSqlQuery::prepare: database not open
"Driver not loaded Driver not loaded"
提示数据库的驱动没有安装,但是Qt的安装文件夹中确实已经存在mysql的动态库文件:
查了下,网络上的一些说法是这些库是不能够直接使用的,所以需要自己拿qt的mysql驱动源码编译
- 切换到qt的数据库驱动源码路径,并且执行qmake
出现如下提示:
应该就是mysql驱动没有安装。继续编译源码
首先先找到mysql驱动编译所依赖的库文件
root@ecs-293010:~# locate mysql.h
/usr/include/mysql/mysql.h
root@ecs-293010:~# locate libmysqlclient.so
/usr/lib/x86_64-linux-gnu/libmysqlclient.so
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.18
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.1.0
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20.3.26
libmysqlclient.so需要安装mysql的客户端才会有
接着修改驱动的工程文件
#进去mysql的驱动源码目录中
cd ~/Qt/5.12.0/Src/qtbase/src/plugins/sqldrivers/mysql
#修改工程文件
vi 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
#添加下边这两行,对应于刚才我们找到依赖文件
INCLUDEPATH += /usr/include/mysql/
LIBS += -L/usr/lib/x86_64-linux-gnu -lmysqlclient
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
接着进行如下操作编译源码:
#进入上一层目录
cd ..
#找到qmake的位置
locate qmake
#执行qmake生成makefile文件
/root/Qt/5.12.0/gcc_64/bin/qmake
#再次进入驱动目录
cd mysql/
#再次执行qmake
/root/Qt/5.12.0/gcc_64/bin/qmake
#编译生成驱动文件
make
编译好之后的驱动文件位于此目录下
~/Qt/5.12.0/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers
接着,就是怎么让这个驱动库发挥作用了!
网络上很多人都是到这一步就说安装好了,或者把这个libqsqlmysql.so文件复制到目录
/root/Qt/5.12.0/gcc_64/lib/
下就说他们程序可以跑了,但是到我这里就还是不行,运行程序还是会报QSqlDatabase: QMYSQL driver not loaded的错误。所以说,这里还有个问题,可执行程序还是找不到mysql驱动库。淦!明明我cmake编译都没有报错啊!
思考良久,决定将解决方法放到下一篇文章:
linux下strace指令彻底解决MySql驱动库未加载问题:QSqlDatabase: QMYSQL driver not loaded