最近在移植开发中需要用到mysql驱动库,但是从Qt 5.12版本开始,官方不再在源码中默认包含MySQL数据库驱动,用户需要自行编译MySQL驱动插件。所以需要自行编译目标平台的mysql驱动库。
目标平台:aarch64
qt版本:5.15.4 (源码)
mysql版本:8.0.42(aarch64)
qmake:5.15.4 (x86,用的是交叉工具链中的qmake)
一、qt源码下载
二、Mysql下载
下载Mysql主要是因为编译mysql驱动需要用到mqsql.h和libmysqlclient.so这两个文件。这两文件要么用mysql源码编译出来,要么下载对应版本的mysql获取
mysql下载:https://downloads.mysql.com/archives/community/
根据需求选择对应的mysql版本,我这里选择mysql8.0.42 + aarch64(对应目标平台)
解压
下载完后解压mysql-8.0.43-linux-glibc2.28-aarch64.tar,解压完后会有三个压缩包。再解压mysql-8.0.43-linux-glibc2.28-aarch64.tar.xz,在include和lib目录下可以看到所需要的mqsql.h和libmysqlclient.so这两个文件
三、编译mysql驱动
1、在qt源码进入mysql编译路径,一般是在源码路径下/qtbase/src/plugins/sqldrivers/mysql。
2、修改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)
# MySQL 头文件和库路径(交叉编译版本)
INCLUDEPATH += /home/embedsky/Downloads/mysql/mysql-8.0.43-linux-glibc2.28-aarch64/include
LIBS += -L/home/embedsky/Downloads/mysql/mysql-8.0.43-linux-glibc2.28-aarch64/lib -lmysqlclient
# so输出路径
DESTDIR = /home/embedsky/Desktop/mysqlTest
# 手动指定交叉 Qt 的头文件和库路径
INCLUDEPATH += /opt/EmbedSky/TQ3568/aarch64-embedsky-linux-gnu/sysroot/usr/local/Qt-5.15.4/include
INCLUDEPATH += /opt/EmbedSky/TQ3568/aarch64-embedsky-linux-gnu/sysroot/usr/local/Qt-5.15.4/include/QtSql
INCLUDEPATH += /opt/EmbedSky/TQ3568/aarch64-embedsky-linux-gnu/sysroot/usr/local/Qt-5.15.4/include/QtCore
3、配置环境变量。在当前路径/qtbase/src/plugins/sqldrivers/mysql下执行该脚本:source bash.sh
#!/bin/bash
# 设置交叉编译工具链的前缀
export CROSS=aarch64-embedsky-linux-gnu
# 设置目标平台的 sysroot 路径
export SYSROOT=/opt/EmbedSky/TQ3568/aarch64-embedsky-linux-gnu/sysroot
# 设置工具链路径
export PATH=/opt/EmbedSky/TQ3568/bin:$PATH
# 设置交叉编译器的相关环境变量
export CC=${CROSS}-gcc
export CXX=${CROSS}-g++
export LD=${CROSS}-ld
export STRIP=${CROSS}-strip
# 交叉编译时,设置 sysroot 路径
export CFLAGS="--sysroot=${SYSROOT}"
export CXXFLAGS="--sysroot=${SYSROOT}"
# 输出确认信息
echo "Cross compilation environment setup complete."
echo "CROSS: ${CROSS}"
echo "SYSROOT: ${SYSROOT}"
echo "PATH: ${PATH}"
echo "CC: ${CC}"
echo "CXX: ${CXX}"
echo "LD: ${LD}"
4、执行qmake命令
qmake mysql.pro
执行完后提示找不到qtsqldrivers-config.pri文件,可以忽略;并且在当前目录下已成功生成makefile文件
5、执行make命令
make
执行完后可以在so输出路径下得到mysql驱动libqsqlmysql.so驱动库。