当前位置: 首页 > news >正文

QT:交叉编译mysql驱动库

最近在移植开发中需要用到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 = qsqlmysqlHEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp#注释掉避免编译报错
#QMAKE_USE += mysqlOTHER_FILES += mysql.jsonPLUGIN_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驱动库。

http://www.lryc.cn/news/610196.html

相关文章:

  • MySQL进阶:(第八篇)深入解析InnoDB存储架构
  • 如何手动打包 Linux(麒麟系统)的 Qt 程序
  • Linux 系统启动原理
  • 通用代码自用
  • [硬件电路-156]:什么是电信号? 电信号的本质:电信号是随时间变化的电压或电流。本质是电子运动表征信息,兼具能量传输与信息编码传递功能。
  • 开源网页生态掘金:从Bootstrap二次开发到行业专属组件库的技术变现
  • 多线程(一)
  • 【Spring AI快速上手 (二)】Advisor实现对话上下文管理
  • 【计算机网络 | 第2篇】计算机网络概述(下)
  • 如何使用 DBeaver 连接 MySQL 数据库
  • 移动端 WebView 视频无法播放怎么办 媒体控件错误排查与修复指南
  • SAP-ABAP:ABAP Open SQL 深度解析:核心特性、性能优化与实践指南
  • 深入剖析Java Stream API性能优化实践指南
  • Mybatis 简单练习,自定义sql关联查询
  • 卸油管链接检测误检率↓76%:陌讯多模态融合算法实战解析
  • Dbeaver数据库的安装和使用(保姆级别)
  • 基于FAISS和Ollama的法律智能对话系统开发实录-【大模型应用班-第5课 RAG技术与应用学习笔记】
  • Ubuntu系统VScode实现opencv(c++)图像一维直方图
  • 机器学习【六】readom forest
  • 微服务配置管理:Spring Cloud Alibaba Nacos 实践
  • 电子电气架构 ---智能电动汽车嵌入式软件开发过程中的block点
  • Nginx服务做负载均衡网关
  • 36.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--缓存Token
  • FPGA学习笔记——简单的乒乓缓存(RAM)
  • 飞算JavaAI需求转SpringBoot项目沉浸式体验
  • android内存作假通杀补丁(4GB作假8GB)
  • labview连接PLC的三种方式
  • 设计模式(一)——抽象工厂模式
  • ES集群规划与调优
  • 进程间通信:管道与共享内存