章节10实验--Ubuntu18.04 Qt MySQL libqsqlmysql.so

  前言:

内容参考《操作系统实践-基于Linux应用与内核编程》一书的示例代码和教材内容,所做的读书笔记。本文记录再这里按照书中示例做一遍代码编程实践加深对操作系统的理解。

引用:

《操作系统实践-基于Linux应用与内核编程》

作者:房胜、李旭健、黄玲、李哲

出版社:清华大学出版社

资源:

 教材资源

链接: https://caiyun.139.com/m/i?1A5Ch36dl1whD  提取码:jdQe

课件和电子资料源码

链接: https://caiyun.139.com/m/i?1A5CvEKY07Uzs  提取码:xyv0

参考链接:

QT mysql 配置 编译libqsqlmysql.so ubuntu-CSDN博客

QT-5.12: QSqlDatabase: QMYSQL driver not loaded 错误及解决方案-CSDN博客

正文:

1. 我的环境:

VirtualBox + Ubuntu18.04 Linux 桌面版 + Qt5.14.2 + MySQL

2. Qt聊天程序编译执行

2.1 执行提示Qt SQL驱动不支持MySQL

《操作系统实践-基于Linux应用与内核编程》第10章--实验 Qt聊天程序-CSDN博客

在按照《操作系统实践-基于Linux应用于内核编程》第10章-实验 Qt聊天程序,这一节博文中对照着电子资源提供的“QChatServer”的源码,动手把示例聊天程序"QChatSerer" 写到Ubuntu18.04 Qt5.14.2 版本的Qt Creator编辑器中。

编译执行"QChatSerer"的源码,在聊天服务器Qt程序连接MySQL数据的时候,Qt程序连接MySQl数据库失败,并提示错误。

QSqlQuery::prepare: database not open
QSqlQuery::exec: database not open
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7

从Qt应用程序的错误输出提示来看,Qt程序连接 MySQL 数据的原因是应为当前没有加载 Qt mysql 驱动,当前我们的Ubuntu18.04 Linux Qt支持的 mysql驱动有“QSQLITE QODBC QODBC3 QPSQL QPSQL7”等,却没有没有 MySQL的驱动。

Qt sql驱动没有支持的MySQL数据库的原因是:

Qt SQL模块已默认不编译mysql驱动,导致mysql驱动缺失,错误提示如下(可用数数据库驱动不含mysql驱动,执行方法一和二);

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7

2.2 编译Qt libqsqlmysql.so 库

参考引用链接博文里的步骤,在Ubuntu18.04 Linux 虚拟机上编译 Qt libqsqlmysql.so 库。

进入Qt5.14.2安装目录下面的 '5.14.2/Src/qtbase/src/plugins/sqldrivers/mysql' 子目录

cd 5.14.2/Src/qtbase/src/plugins/sqldrivers/mysql

编辑 mysql.pro 文件,注释掉文件中的 ' #QMAKE_USE += mysql '

#QMAKE_USE += mysql

在文件加上如下路径名(把路径名替换成自己的路径名)

INCLUDEPATH+=/usr/include/mysql
LIBS+=-L/usr/lib/x86_64-linux-gnu/ -lmysqlclient

可以通过如下命令‘ mysql_config --cflags --libs ’获取到自己的路径名

~$ mysql_config --cflags --libs
-I/usr/include/mysql 
-L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lm -lrt -latomic -lssl -lcrypto -ldl
~$

注意:我在修改mysql.pro文件时不小心出现了如下错误,在你修正这个文件时请注意避免。

###错误,不小心在 ‘INCLUDEPATH+=’后面,多加了'-I'两个字符。

#INCLUDEPATH+=-I/usr/include/mysql  (错误)
LIBS+=-L/usr/lib/x86_64-linux-gnu/ -lmysqlclient


###正确的写法是,INCLUDEPATH+=’后面直接接路径,不加'-I'。

INCLUDEPATH+=/usr/include/mysql
LIBS+=-L/usr/lib/x86_64-linux-gnu/ -lmysqlclient

执行 ' qmake mysql.pro '  命令,进行编译。如果提示如下错误,说明 'qmake'还没有安装,执行 apt 命令安装 qtmake。

Command 'qmake' not found, but can be installed with:sudo apt install qtchooser

提示执行 ' sudo apt install qtchooser ' 安装qmake。这里我们不需要安装'qtchooser',我们使用Qt5.14.2安装目录里的qmake。

sudo apt install qtchooser

使用‘ find -name qmake ’命令找到Qt5.14.2 安装目录里的qmake

dimon@dimon-VirtualBox:~/Qt5.14.2$ find -name qmake
./Examples/Qt-5.14.2/qmake
./Tools/QtCreator/share/qtcreator/templates/wizards/projects/qmake
./Docs/Qt-5.14.2/qmake
./5.14.2/Src/qtbase/tests/auto/tools/qmake
./5.14.2/Src/qtbase/qmake
./5.14.2/Src/qtbase/qmake/doc/snippets/qmake
./5.14.2/Src/qtbase/examples/qmake
./5.14.2/gcc_64/bin/qmake
dimon@dimon-VirtualBox:~/Qt5.14.2$ 

从输出看到在我的当前环境配置里 ' ./5.14.2/gcc_64/bin/qmake ' ,Qt5.14.2 安装的qmake的路径。执行 ' ./5.14.2/gcc_64/bin/qmake -v '查看下 qmake的版本信息

dimon@dimon-VirtualBox:~/Qt5.14.2$ ./5.14.2/gcc_64/bin/qmake -v
QMake version 3.1
Using Qt version 5.14.2 in /home/dimon/Qt5.14.2/5.14.2/gcc_64/lib
dimon@dimon-VirtualBox:~/Qt5.14.2$

使用qamake完整路径执行 ‘ /home/dimon/Qt5.14.2/5.14.2/gcc_64/bin/qmake mysql.pro ’ 命令(把路径名替换成你自己环境里的路径名)。如果提醒如下错误:

~$ /home/dimon/Qt5.14.2/5.14.2/gcc_64/bin/qmake mysql.pro
Cannot read /home/dimon/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers/qtsqldrivers-config.pri: No such file or directory

~$

错误提醒我们找不到文件' 5.14.2/Src/qtbase/src/plugins/sqldrivers/qtsqldrivers-config.pri  '。进入上一级目录' 5.14.2/Src/qtbase/src/plugins/sqldrivers ',

dimon@dimon-VirtualBox:~/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers$ grep qtsqldrivers-config.pri ./* -n
grep: ./db2: Is a directory
grep: ./ibase: Is a directory
grep: ./lib: Is a directory
grep: ./mkspecs: Is a directory
grep: ./mysql: Is a directory
grep: ./oci: Is a directory
grep: ./odbc: Is a directory
grep: ./plugins: Is a directory
grep: ./psql: Is a directory
./qsqldriverbase.pri:4:include($$shadowed($$PWD)/qtsqldrivers-config.pri)
grep: ./sqlite: Is a directory
grep: ./sqlite2: Is a directory
grep: ./tds: Is a directory
dimon@dimon-VirtualBox:~/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers$

修改文件 ‘ ./qsqldriverbase.pri ’ 注释掉 如下一句。 

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

再次执行' qmake mysql.pro' ,命令执行成功并生成 Makefile

qmake mysql.pro

 执行 ' make ',进行编译,编译成功

make

执行 ' make install ',进行安装,安装成功。

make install

2.3 Qt应用程序连接MySQL数据库成功

通过上面的步骤成功在 Ubuntu18.04 Linux 虚拟机上编译 Qt5.14.2 的MySQL数据库连接驱动后,再次执行我们的QChartServer聊天程序,已经可以正确连接系统上的MySQL数据库了。

3. 问下百度AI这个问题

问题已经解决完了,我们测试下最近的正能AI编程服务工具,看下正能AI能不能在解决这类问题时,给我们一些灵感。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/766915.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang 对接第三方接口 RSA 做签(加密) 验签(解密)

一、过程 1.调用第三方接口前,一般需要按规则将参数按key1value1&key2value2 阿斯克码排序,sign参数不参与加密 2.将排序并连接好的参数字符串通过我方的私钥证书(.pem)进行加密得到加密串,当然加密得到的是 []byte 字节流&…

看完就等于拿捏浮点数在内存中的储存了

诸君又该学习了,今天我们继续来一睹浮点数的奥妙真容。 经过前面文章对整形提升相关的解释,我们都对整形和字符在内存空间上的储存已经有了大概的认知,那么现在我们就来好好讲讲浮点数在内存中的储存规则。 目录 浮点数与整形储存的不同 …

41-Vue-webpack基础

webpack基础 前言什么是webpackwebpack的基本使用指定webpack的entry和output 前言 本篇开始来学习下webpack的使用 什么是webpack webpack: 是前端项目工程化的具体解决方案。 主要功能:它提供了友好的前端模块化开发支持,以及代码压缩混淆、处理浏览…

自定义序列化

3.2.2.自定义序列化 RedisTemplate可以接收任意Object作为值写入Redis: 只不过写入前会把Object序列化为字节形式,默认是采用JDK序列化,得到的结果是这样的: 缺点: 可读性差内存占用较大 我们可以自定义RedisTempla…

NASA数据集——2015 年30 米分辨率的地衣地面覆盖率模型估计值

cABoVE: Lichen Forage Cover over Fortymile Caribou Range, Alaska and Yukon, 2000-2015 文件修订日期:2021-07-21 数据集版本: 1 摘要 本数据集提供了美国阿拉斯加东部内陆和加拿大育空地区 Fortymile 研究区 2015 标称年 30 米分辨率的地衣地面覆盖率模型估…

YOLOv8-ROS-noetic+USB-CAM目标检测

环境介绍 Ubuntu20.04 Ros1-noetic Anaconda-yolov8虚拟环境 本文假设ROS和anaconda虚拟环境都已经配备,如果不知道怎么配备可以参考: https://blog.csdn.net/weixin_45231460/article/details/132906916 创建工作空间 mkdir -p ~/catkin_ws/srccd ~/ca…

湖北专升本报名照片需要<40kb怎么解决

湖北专升本报名照片需要<40kb怎么解决

vue 修改element-plus主题色

一、安装SCSS npm install sass --save-dev npm install sass-loader --save-dev npm install node-sass --save-dev npm install vue-style-loader --sava-dev 二、添加主题文件theme.scss forward "element-plus/theme-chalk/src/common/var.scss" with ($col…

kubernetes负载均衡-service

一、service的概念 1、什么是service 在Kubernetes中&#xff0c;pod是应用程序的载体&#xff0c;当我们需要访问这个应用时&#xff0c;可以通过Pod的IP进行访问&#xff0c;但是这里有两个问题:1、Pod的IP地址不固定&#xff0c;一旦Pod异常退出、节点故障&#xff0c;则会…

【STM32】读写BKP备份寄存器RTC实时时钟

目录 BKP BKP简介 BKP基本结构 BKP测试代码 RTC RTC简介 RTC框图 RTC基本结构 硬件电路 RTC操作注意事项 接线图 初始化 使用BKP解决只初始化一次时间 初始化参考代码 RTC设置时间 RTC读取时间 完整代码 MyRTC.c MyRTC.h main.c BKP BKP简介 BKP&#xff0…

pytorch中tensor类型转换的几个函数

目录 IntTensor转FloatTensor FloatTensor转IntTensor Tensor类型变为python的常规类型 IntTensor转FloatTensor .float函数&#xff1a; FloatTensor转IntTensor .int函数 Tensor类型变为python的常规类型 item函数

阿里云部署MySQL、Redis、RocketMQ、Nacos集群

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容MySQL集群配置云服务器选购CPU选择内存选择云盘选择ESSD AutoPL云盘块存储性能&#xff08;ESSD&#xff09; 镜像选择带宽选择密码配置注意事项 安装docker和docker-compose部署MySQL三主六从半同步集群一主二从同步集群规…

pytorch如何向tensor结尾添加元素或维度--torch.cat()、torch.unsqueeze()的用法

目录 示例1 矢量后增加元素 示例2 tensor维度增加1 示例3 另一种替代unsqueeze的方法 示例1 矢量后增加元素 使用torch.cat()函数 ptorch.Tensor([1,5,0]) ptorch.cat((p, torch.Tensor([4])), 0) 结果&#xff1a; 这里&#xff0c;cat的第一个输入变量用()包绕&#xf…

Request请求参数----中文乱码问题

一: GET POST获取请求参数: 在处理为什么会出现中文乱码的情况之前, 首先我们要直到GET 以及 POST两种获取请求参数的不同 1>POST POST获取请求参数是通过输入流getReader来进行获取的, 通过字符输入流来获取响应的请求参数, 并且在解码的时候, 默认的情况是 ISO_885…

由浅到深认识Java语言(21):Math类

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

GaussDB WDR分析之集群报告篇

AWR报告目前已经成为Oracle DBA分析问题&#xff0c;定位故障最为重要的报告&#xff0c;阅读与分析AWR报告的技能也是Oracle DBA必备的技能。国产数据库为了提高运维便捷性&#xff0c;都在做类似Oracle AWR报告的模仿&#xff0c;只不过由于指标体系不够完善&#xff0c;因此…

postman 用上一个请求的响应体中的字段设置下一个请求的请求参数

文章目录 IntroPostman usagePre-request ScriptTests javascripts API Intro 这一切都是为了增加自动化动作所占的比例&#xff08;减少人手工操作复制粘贴可能会造成的错误&#xff09;。 Postman usage 最常用的&#xff1a;选HTTP方法类型、写URL&#xff0c;在Headers中…

如何解决Layui后台接口返回数据,但是table.render不渲染表格数据的问题

我这边进行了pareData数据格式转换&#xff0c;response重新定义了layui的参数格式规范 接口正常返回了数据 但是就是不渲染&#xff0c;我这个郁闷啊&#xff01;&#xff01; 忽然&#xff0c;我把后台重新定义的layui规定的格式参数&#xff0c;有个参数名叫data&#xff0…

sql注入五-WEB攻防-注入工具SQLMAPTamper编写指纹修改高权限操作目录架构

演示案例&#xff1a; 数据猜解-库表列数据&字典权限操作-文件&命令&交互式提交方法-POST&HEAD&JSON绕过模块-Tamper脚本-使用&开发分析拓展-代理&调试&指纹&风险&等级 #参考&#xff1a; https://www.cnblogs.com/bmjoker/p/9326258.…

自动化的免下车服务——银行、餐厅、快餐店、杂货店

如果您在20世纪70年代和2020年分别驾车经过免下车服务餐厅&#xff08;汽车穿梭餐厅&#xff09;&#xff0c;您会发现&#xff0c;唯一的不同是排队的车型。50多年来&#xff0c;免下车技术一直为我们提供着良好的服务&#xff0c;但现在也该对它进行现代化改造了。 乘着AI和自…