0、背景

在上一文《QT学习笔记-QT安装postgresql驱动》中介绍了在Windows环境下使用QT访问postgresql数据库时遇到驱动无法加载问题的解决办法,大体思路是对QT源码中数据库驱动的源码进行编译,要想通过编译需要依赖对应数据库的头文件和库(可以通过安装postgresql或者下载对应window版本的压缩包获得-就是已经编译好的),编译通过后就可以把生成的驱动文件放入plugin/sqldrivers的目录下,再把一些必须依赖的dll(libcrypto-1_1-x64.dll、libiconv-2.dll、libintl-9.dll、libpg.dll、libssl-1_1-x64.dll)放到所使用的QT编译套件(比如:D:\Qt\5.15.2\mingw81_64\bin)的bin目录下就可以正常访问postgresql数据库了。然而要想把postgresql驱动移植到ARM开发板就需要更复杂的一些步骤,本文介绍具体的移植过程。

1、搭建交叉编译环境

由于ARM开发板的内存资源和存储资源以及嵌入式操作系统的限制,我们不大可能在ARM开发板的系统上安装QT开发环境以及源码,ARM开发板通常作为最终的运行环境。我们用的笔记本或个人PC往往是X86处理器,因此在笔记本系统或个人PC中编译的QT程序是无法直接运行在ARM开发板上的。从开发电脑到ARM开发板是有2个关键的变化,1是操作系统从Windows变为了Linux,2是从X86处理器变为了ARM处理器。这就需要搭建一台交叉编译服务器(可以是一台独立的PC或者是虚拟机),交叉编译服务器的操作系统要为Linux,示意如下:
QT学习笔记-postgresq数据库l驱动移植到RK3568ARM开发板-LMLPHP

2、交叉编译过程

1、我们知道Qt开发的源码,要生成可执行程序一般要通过2个步骤:

2、我是通过buildroot构建目标操作系统的,因为要在目标系统中运行qt的程序,因此在构建过程中要把qt的环境编译到目标系统中,构建完毕后会在buildroot目录下生成output目标,我们可以采用这下面的qmake生成采用交叉编译器的Makefile,如下:
QT学习笔记-postgresq数据库l驱动移植到RK3568ARM开发板-LMLPHP

3、我们先把qt源码部署到交叉编译环境中,如下:
QT学习笔记-postgresq数据库l驱动移植到RK3568ARM开发板-LMLPHP
4、通过vim修改psql.pro工程文件内容,注释掉QMAKE_USE += psql,如下:
QT学习笔记-postgresq数据库l驱动移植到RK3568ARM开发板-LMLPHP
然后按ESC,输入wq保存退出。

4、然后我们使用SDK/buildroot/output/rockchip_rk3568/host/bin/qmake生成Makefile,同时要执行依赖的libpq.so库的路径,如下:

QT学习笔记-postgresq数据库l驱动移植到RK3568ARM开发板-LMLPHP
5、看一下Makfile的内容:
QT学习笔记-postgresq数据库l驱动移植到RK3568ARM开发板-LMLPHP

6、这时,再执行make就会采用交叉编译工具aarch64-buildroot-linux-gnu-gcc和aarch64-buildroot-linux-gnu-g++进行编译了,
编译完毕后,会生成libqsqlpsql.so,如下图:
QT学习笔记-postgresq数据库l驱动移植到RK3568ARM开发板-LMLPHP

至此终于生成了支持目标系统(Arm/Linux)能够识别的数据库驱动库libqsqlpsql.so。

3、把数据库驱动部署到目标系统中

1、首先通过MobaXterm以SSH方式连接到目标系统(开发板系统)。
2、在/usr/lib/qt/plugins目录下创建目录sqldrivers。
3、把在交叉编译服务器中生成的QtSrc/qtbase/src/plugins/sqldrivers/plugins/sqldrivers/libqsqlpsql.so文件传到目标系统的/usr/lib/qt/plugins/sqldrivers目录下,如下:
QT学习笔记-postgresq数据库l驱动移植到RK3568ARM开发板-LMLPHP
至此,目标系统就支持Qt程序对postgresql数据库的访问了。

03-30 16:10