泉州百度搜索推广,株洲seo主管,酷奇趣wordpress邀请码,20元备案域名QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动 0、背景1、基本环境2、开发环境编译Qt MySql数据库驱动2.1 依赖说明2.2 MySQL驱动编译过程 3、交叉编译Qt MySql数据库驱动3.1 依赖说明3.3.1 如何在交叉编译服务器上找到mysql.h及相关头文件3.3.2 如果… QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动 0、背景1、基本环境2、开发环境编译Qt MySql数据库驱动2.1 依赖说明2.2 MySQL驱动编译过程 3、交叉编译Qt MySql数据库驱动3.1 依赖说明3.3.1 如何在交叉编译服务器上找到mysql.h及相关头文件3.3.2 如果在交叉编译服务器上获得目标系统ARM版本的libmysqlclient.so库 3.2 MySQL驱动交叉编译过程 4、把数据库驱动部署到目标系统中5、QT测试程序访问MySQL数据库5.1 关键代码5.2 执行结果 0、背景
如果需要在QT程序中实现与MySQL数据库的交互那么必不可少的一环就是对Qt MySql数据库驱动的编译。
1、基本环境
操作系统Windows10 专业版 64位 Qt版本Qt 5.15.2 开发环境Qt安装路径D:\Qt 交叉编译服务器Ubuntu 18.4 交叉编译服务器Qt安装路径/opt/Qt 目标芯片rk3568 目标平台arm64 Qt安装时需要勾选安装源码否则是无法找到Qt的数据库驱动源码的。 2、开发环境编译Qt MySql数据库驱动
2.1 依赖说明 mysql.h及相关头文件libmysql.lib 因为在编译Qt MySql驱动源码是需要依赖libmysql.lib和mysql.h头文件在开发环境中Windows我们可以通过安装MySql服务 开发环境中MySQL的安装说明 版本5.7 安装目录C:\Program Files\MySQL\MySQL Server 5.7 libmysql.lib所在目录C:\Program Files\MySQL\MySQL Server 5.7\lib mysql.h及相关头文件所在目录C:\Program Files\MySQL\MySQL Server 5.7\include
2.2 MySQL驱动编译过程
1、驱动源码目录D:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql 2、在Windows的开始菜单中找到Qt5.15.2(MinGW 8.1.0 64-bit)命令行工具 3、切换到mysql驱动源码目录下D:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql然后分别执行以下命令 qmake “INCLUDEPATH‘C:\Program Files\MySQL\MySQL Server 5.7\include’” “LIBS‘C:\Program Files\MySQL\MySQL Server 5.7\lib\libmysql.lib’” -o Makefile mysql.pro mingw32-make
qmake INCLUDEPATHC:\Program Files\MySQL\MySQL Server 5.7\include LIBSC:\Program Files\MySQL\MySQL Server 5.7\lib\libmysql.lib -o Makefile mysql.pro
mingw32-make4、编译后的输出目录D:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\plugins\sqldrivers 5、把编译后的输出文件libqsqlmysql.a、qsqlmysql.dll、qsqlmysql.dll.debug复制到D:\Qt\5.15.2\mingw81_64\plugins\sqldrivers目录下 6、编译项目需默认引用的目录D:\Qt\5.15.2\mingw81_64\plugins\sqldrivers 7、要把对应的dll复制到C:\Windows目录下libmysql.dll
3、交叉编译Qt MySql数据库驱动
3.1 依赖说明 mysql.h及相关头文件libmysqlclient.so注意是目标系统的库-arm版本的库 3.3.1 如何在交叉编译服务器上找到mysql.h及相关头文件
1、我的交叉编译服务器用的就是构建目标linux操作系统的编译服务器ubuntu18.4可以通过安装libmysqlclient-dev软件包获取mysql.h及相关头文件。 2、首先切换到root用户
sudo -i输入root用户的密码后就切换到root用户了 3、然后执行以下命令如果未切换到root用户则前面加上sudo
apt-get upgrade
apt-get install -y libmysqlclient-dev如下图 4、安装完毕后就可以在/usr/include/mysql目录下找到mysql.h及相关头文件了如下图
3.3.2 如果在交叉编译服务器上获得目标系统ARM版本的libmysqlclient.so库
1、在3.3.1中安装libmysqlclient-dev后也会在/usr/lib/x86_64-linux-gnu目录下部署libmysqlclient.so但是这个文件不是arm版本的因此在交叉编译qt mysql驱动时是不能引用这个库的。如下图 2、因为我的交叉编译服务器就是用的构建linux操作系统的编译服务器因此在构建目标操作系统时可以通过buildroot的menuconfig勾选mysql的支持以生成arm版本的libmysqlclient.so如下图 3、勾选mysql support后重新构建目标操作系统后在buildroot的输出目录下的target/usr/lib目录下就包含arm版本的libmysqlclient.so了如下图
3.2 MySQL驱动交叉编译过程
1、我们知道Qt开发的源码要生成可执行程序一般要通过2个步骤 通过qmake生成Makefile通过make对源码进行编译生成动态库和可执行程序 交叉编译的思路首先我们要明白在开发环境中安装qt时自带的qmake是不能作为交叉编译用的因为他生成的Makefile中所采用的gcc和g编译器都是对应x86和windows的。再就是我们如果再交叉编译服务器X86/Linux上直接安装Linux版本的qt的话这个qt自带的qmake也不能作为交叉编译用因为他生成的Makefile中所采用的gcc和g编译器都是对应x86和Linux的。因此我们首先要找到对应目标系统Arm/Linux的qmake才行。 2、我是通过buildroot构建目标操作系统的因为要在目标系统中运行qt的程序因此在构建过程中要把qt的环境编译到目标系统中构建完毕后会在buildroot目录下生成output目标我们可以采用这下面的qmake生成采用交叉编译器的Makefile如下 qmake的目录为SDK/buildroot/output/rockchip_rk3568/host/bin/qmake 其中SDK表示编译目标Linux系统的源码目录 rockchip_rk3568对应的是芯片型号 3、我们先把qt源码部署到交叉编译环境中如下 4、通过vim修改mysql.pro工程文件内容注释掉QMAKE_USE mysql如下 然后按ESC输入wq保存退出。 5、然后我们使用SDK/buildroot/output/rockchip_rk3568/host/bin/qmake生成Makefile同时要执行包含mysql.h及相关头文件所在的目录且依赖的libmysqlclient.so库的路径如下 SDK/buildroot/output/rockchip_rk3568/host/bin/qmake “INCLUDEPATH/usr/include/mysql” “LIBSSDK/buildroot/output/rockchip_rk3568/target/usr/lib/libmysqlclient.so” -o Makefile mysql.pro 其中SDK表示编译目标Linux系统的源码目录 rockchip_rk3568对应的是芯片型号 SDK/buildroot/output/rockchip_rk3568/target/usr/lib/libmyqlclient.so文件是通过交叉编译工具对libmysqlclient-dev源码编译生成的针对目标系统Arm/Linux的库文件。 6、看一下Makfile的内容 可以看到这里的Makefile中指定的gcc/g编译工具就是交叉编译工具就是能生成Arm/Linux能运行的。 具体目录为 SDK/buildroot/output/rockchip_rk3568/host/bin/aarch64-buildroot-linux-gnu-gcc SDK/buildroot/output/rockchip_rk3568/host/bin/aarch64-buildroot-linux-gnu-g 其中SDK表示编译目标Linux系统的源码目录 rockchip_rk3568对应的是芯片型号。 7、这时再执行make就会采用交叉编译工具aarch64-buildroot-linux-gnu-gcc和aarch64-buildroot-linux-gnu-g进行编译了 编译完毕后会生成libqsqlmysql.so如下图 目录QtSrc/qtbase/src/plugins/sqldrivers/plugins/sqldrivers 其中QtSrc表示Qt的源码目录。 至此终于生成了支持目标系统Arm/Linux能够识别的数据库驱动库libqsqlmysql.so。
4、把数据库驱动部署到目标系统中
1、首先通过MobaXterm以SSH方式连接到目标系统开发板系统。 2、在/usr/lib/qt/plugins目录下创建目录sqldrivers。 3、把在交叉编译服务器中生成的QtSrc/qtbase/src/plugins/sqldrivers/plugins/sqldrivers/libqsqlmysql.so文件传到目标系统的/usr/lib/qt/plugins/sqldrivers目录下如下
至此目标系统就支持Qt程序对postgresql数据库的访问了。
5、QT测试程序访问MySQL数据库
5.1 关键代码
void Widget::on_btnDbTest_clicked()
{//以下代码测试访问MySQL数据QSqlDatabase db QSqlDatabase::addDatabase(QMYSQL);db.setHostName(xxx.xxx.xxx.xxx); //数据库服务器的ipdb.setPort(3306); //数据库服务器的端口号db.setDatabaseName(mydbname); //此处写你数据库的名称db.setUserName(root); //写mysql数据库的用户名db.setPassword(root123); //写mysql数据库的密码if (!db.open()){qDebug() 数据库连接失败!;QSqlError lastError db.lastError();qCritical() lastError.nativeErrorCode() , lastError.text();}else{qDebug() 数据库连接成功!;QSqlQuery query(db);if (query.exec(select * from sys_user)){qDebug() 查询表格UserInfo成功!;while(query.next()){qDebug() query.value(0).toInt() , query.value(1).toString() , query.value(2).toString() , query.value(3).toString();}}}
}5.2 执行结果
把上面的qt程序交叉编译后放入目标系统arm执行效果如下