qt 5.9.5开源版,官方自带的只有sqlite驱动,mysql需要自己编译。

1、qt官方仓库,下载qtbase-opensource-src-5.9.5

2、解包,到src/plugins/sqldrivers/路径下,用qtcreator打开sqlderivers.pro工程,注释掉不需要的子项目(可选)

TEMPLATE = subdirs

sqldrivers_standalone {
_QMAKE_CACHE_ = $$shadowed($$SQLDRV_SRC_TREE)/.qmake.conf
load(qt_configure)
}

# qtConfig(sql-psql) : SUBDIRS += psql
qtConfig(sql-mysql) : SUBDIRS += mysql
# qtConfig(sql-odbc) : SUBDIRS += odbc
# qtConfig(sql-tds) : SUBDIRS += tds
# qtConfig(sql-oci) : SUBDIRS += oci
# qtConfig(sql-db2) : SUBDIRS += db2
# qtConfig(sql-sqlite) : SUBDIRS += sqlite
# qtConfig(sql-sqlite2) : SUBDIRS += sqlite2
# qtConfig(sql-ibase) : SUBDIRS += ibase

保留mysql

3、修改mysql.pro,注释掉默认的QMAKE_USE += mysql,否则编译会报找不到mysql库错误,原因是mysql将libmysql改成了libmysqlclient,在开发板上找libmysqlclient.so文件(3个),如果没有,尝试从仓库中安装

sudo apt-get install -y libmysqlclient-dev

如果仓库也没有,只能交叉编译mysql源码。我是交叉编译了mysql源码将生成的libmysqlclient.so、libmysqlclient.so.20、libmysqlclient.so.20.3.29放到了交叉编译环境的路径中

上次交叉编译mysql也是一顿折腾,忘记写下来了,下次有机会再补,编译好的libmysqlclient库下载,适用于ubuntu 18.04 arm64(飞凌rk3399开发板)

添加头文件路径、libmysqlclient库文件路径和生成libqsqlmysql.so库文件的输出路径

#QMAKE_USE += mysql

OTHER_FILES += mysql.json

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

INCLUDEPATH += “/home/louis/for_qt_mysql_driver_compiling/mysql/”
LIBS += -L/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/lib64 -lmysqlclient
DESTDIR = /home/louis/Qt/qt-5.9.5_rk3399_lite/plugins/sqldrivers/


4、修改qsqldriverbase.pri文件,将

include($$shadowed($$PWD)/qtsqldrivers-config.pri)

修改为

include(./qtsqldrivers-config.pri)

$$shadowed($$PWD)会导致找不到qtsqldrivers-config.pri文件,具体原因问chatGPT或者Gemini

之后可以编译了(用目标板的交叉编译环境编译,参考我之前的文章《搭建交叉编译环境》)。我编译的libqsqlmysql.so文件,适用于ubuntu 18.04 arm64(rk3399)

之前qt 5.9.5默认只带了sqlite的驱动,运行时报错:

将libqsqlmysql.so文件拷贝到开发板上qt 5.9.5 的pulgins/sqldrivers/路径中就可以运行了