2024:Qt--编译配置Protobuf(windows10) 配图详解

这里写自定义目录标题

  • 一、准备
    • 1、Window10系统
    • 2、Qt Creator 5.0.2 Based on Qt 5.15.2 (MSVC 2019, 64 bit)
    • 3、protobuf-3.15.0(本示例使用版本)
    • 4、cmake-3.21.3-windows-x86_64(本示例使用,下载的zip直接解压使用)
  • 二、Protobuf编译
    • 1、打开CMake软件
    • 2、配置Where is source code,protobuf源码路径下的cmake
    • 3、配置Where to build the binaries,即编译后产生文件的路径。
    • 4、Configure
    • 5、Generating,产生要编译的文件
    • 6、在编译后产生文件的output路径下,按住**Shift+鼠标右键**,弹出右键菜单后,打开Powershell窗口
    • 7、mingw32-make
  • 三、生成相应.h和.c文件
    • 1、先创建一个 testProto.proto 文件
    • 2、方法
      • 方法1 直接cmd指令
      • 方法2 批处理文件
  • 四、QT中的使用
    • 1、创建QT工程
    • 2、移入protobuf源码
    • 3、protobuf目录中移入相关dll、bat、exe文件
    • 4、.pro文件中引入src、dll以及pb.h和pb.c
    • 5、序列化与反序列化,并编译运行
  • 结束语

一、准备

本教程的环境及相关准备:

1、Window10系统

2、Qt Creator 5.0.2 Based on Qt 5.15.2 (MSVC 2019, 64 bit)

3、protobuf-3.15.0(本示例使用版本)

Protbuf源码下载地址
在这里插入图片描述

4、cmake-3.21.3-windows-x86_64(本示例使用,下载的zip直接解压使用)

下载cmake 选择相应版本
在这里插入图片描述

二、Protobuf编译

创建一个文件夹,用于存储编译protobuf产生的文件
例如:
在这里插入图片描述

1、打开CMake软件

启动cmake

2、配置Where is source code,protobuf源码路径下的cmake

配置 Where is source code

3、配置Where to build the binaries,即编译后产生文件的路径。

配置 Where to build the binaries
PS:因为之前我已经编译过了,所以路径下已经存在相关文件,如果没编译过路径下为空。

4、Configure

配置
PS 异常
异常1
–>>查看提示,发现Qt路径配置有问题(之前重装过QT!!)
查看问题
QT路径修正后,重新配置
在这里插入图片描述

5、Generating,产生要编译的文件

Generating

6、在编译后产生文件的output路径下,按住Shift+鼠标右键,弹出右键菜单后,打开Powershell窗口

打开窗口1
打开窗口2

7、mingw32-make

在这里插入图片描述
PS 异常:Qt环境变量未配置导致
mingw32-make异常
–>>根据安装路径,配置一下“环境变量”
环境变量

完成后,关闭Windows PowerShell界面 重新打开 继续mingw32-make
正常开始
PS:这个过程会花点时间,稍微等一会
过程1
过程2

PS:我这边到这里就结束了!exe文件已产生,虽然没有100%,但是不影响后继的使用…
完成

三、生成相应.h和.c文件

1、先创建一个 testProto.proto 文件

示例文件内容:

syntax = "proto3";package protocol;                   // 命名空间// cmd= 0x0001
message LinkReq {string lock_id              = 1;	// 锁体Idstring user_id              = 2;	// 用户Iduint32 protocol_version     = 3;	// 协议版本号uint32 random               = 4;	// 随机数1
}// cmd= 0x8001
message LinkReq_Ack {string lock_id              = 1;	// 锁体Iduint32 protocol_version     = 2;	// 协议版本号uint32 random               = 3;	// 随机数2bytes authData              = 4;	// 认证报文
}

2、方法

方法1 直接cmd指令

通过cmd 直接编译.proto文件生成.h和.c文件

通过cmd指令切换到编译后产生文件的output路径下,输入命令

protoc --cpp_out=./ testProto.proto

编译成功后,目录下多了.h和.c文件
编译完成

方法2 批处理文件

把上述 testProto.proto 文件 复制一个并重新命名为 batTestProto.proto
通过Windows批处理文件bat 间接编译.proto文件生成.h和.c文件
创建一个bat文件,如:protoc.bat
内容:

@echo on
setlocal EnableDelayedExpansionset project_name=batTestProtoset cur_disk=%~d0
set proto_file_dir=%~dp0%cur_disk%cd /D %proto_file_dir%del /F %project_name%.pb.cc
del /F %project_name%.pb.hprotoc --cpp_out=./ %project_name%.protopause

双击后,发现已自动生成.cc和.h文件
bat双击结果

四、QT中的使用

1、创建QT工程

2、移入protobuf源码

创建QT工程后,在QT工程.pro文件同级目录下创建文件夹protobuf并将protobuf源码src整个目录复制到QT工程所在目录
源码src

工程

3、protobuf目录中移入相关dll、bat、exe文件

在这里插入图片描述
PS:移入bat与exe文件是为了方便随时在工程中可以编辑、编译proto文件生成新.c与.h文件

4、.pro文件中引入src、dll以及pb.h和pb.c

引入

5、序列化与反序列化,并编译运行

编译及运行

结束语

这样就结束了,希望对你有帮助!

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

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

相关文章

自编码器(autoencoder)

1.自编码器的由来 最初的自编码器是用来降维的,后来也逐渐用于去噪、生成任务。 2.自编码器的基本结构 自编码器(autoencoder)内部有一个隐藏层 h,可以产生编码(code)表示输入。该网络可以看作由两部分组…

ArcGIS Desktop使用入门(四)——ArcMap软件彻底卸载删除干净

系列文章目录 ArcGIS Desktop使用入门(一)软件初认识 ArcGIS Desktop使用入门(二)常用工具条——标准工具 ArcGIS Desktop使用入门(二)常用工具条——编辑器 ArcGIS Desktop使用入门(二&#x…

支持向量机回归及其应用(附Python 案例代码)

使用支持向量机回归估计房价 让我们看看如何使用支持向量机(SVM)的概念构建一个回归器来估计房价。我们将使用sklearn中提供的数据集,其中每个数据点由13个属性定义。我们的目标是根据这些属性估计房价。 引言 支持向量回归(SV…

vim的使用及退出码(return 0)

linux基础之vim快速入门 linux基础之vim快速入门_基本linux vim-CSDN博客https://blog.csdn.net/ypxcan/article/details/119878137?ops_request_misc&request_id&biz_id102&utm_termvim%E7%BC%96%E8%BE%91%E5%99%A8%E5%A4%8D%E5%88%B6%E7%B2%98%E8%B4%B4%E4%BA%…

Java(十)——接口

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…

JAVA零基础学习3(Scanner类,字符串,StringBuilder,StringJoinder,ArrayList成员方法)

JAVA零基础学习3 Scanner类输入示例代码代码解释完整代码1. 读取字符串2. 读取整数3. 读取浮点数4. 读取布尔值5. 读取单个单词6. 读取长整型数7. 读取短整型数8. 读取字节数注意事项总结 API 字符串解释示例解释解决方法示例:使用 StringBuilder String…

口碑爆棚的高分法国电影,一起在光影中领略法式魅力吧!

文章目录 引言《与玛格丽特的午后》(网友评分:9.1)《午夜巴黎》(网友评分:8.3)《玫瑰人生》(网友评分:8.4)《双姝奇缘》(网友评分:8.7)《巴黎淘气帮》(网友评分:8.6)《触不可及》(网友评分:9.3)《爱在日落黄昏时》(网友评分:8.9)《悲惨世界》(网友评分:…

VScode使用Github Copilot插件时出现read ECONNREST问题的解决方法

文章目录 read ECONNREST查看是否仍是 Copilot 会员查看控制台输出网络连接问题浏览器设置问题笔者的话 read ECONNREST 最近使用 Copilot 时一直出现 read ECONNREST 问题,这个表示连接被对方重置了,就是说在读取数据时连接被关闭。 我首先怀疑是不是…

[023-2].第2节:SpringBoot中接收参数相关注解

我的后端学习大纲 SpringBoot学习大纲 1.1.基本介绍: SpringBoot接收客户端提交的数据、参数会使用的一些注解: 1.PathVarible2. RequestHeader3.RequestParam4.CookieValue5.RequestBody6.RequestAttribute 1.2.接收参数相关注解与应用实例:…

无人机制造工艺流程详解

一、需求分析 无人机制造的第一步是需求分析。这一阶段主要明确无人机的使用场景、功能要求、性能指标以及成本预算等。通过与客户或项目团队的深入沟通,确保对无人机的需求有全面而准确的理解。同时,也需要进行市场调研,了解同类型产品的特…

科普文:docker基础概念、软件安装和常用命令

docker基本概念 一 容器的概念 1. 什么是容器:容器是在隔离的环境里面运行的一个进程,这个隔离的环境有自己的系统目录文件,有自己的ip地址,主机名等。也可以说:容器是一种轻量级虚拟化的技术。 2. 容器相对于kvm虚…

如何使用 SQLite ?

SQLite 是一个轻量级、嵌入式的关系型数据库管理系统(RDBMS)。它是一种 C 库,实现了自给自足、无服务器、零配置、事务性 SQL 数据库引擎。SQLite 的源代码是开放的,完全在公共领域。它被广泛用于各种应用程序,包括浏览…

【C语言】函数的递归

目录 一、什么是递归 二、递归的思想 三、递归的限制条件 四、递归中的栈溢出 五、递归举例 (1)例1:n的阶乘 (2)例子2:顺序打印一个数的每一位 六、递归和迭代 七、拓展题目 (1&#…

Chainlit一个快速构建成式AI应用的Python框架,无缝集成与多平台部署

概述 Chainlit 是一个开源 Python 包,用于构建和部署生成式 AI 应用的开源框架。它提供了一种简单的方法来创建交互式的用户界面,这些界面可以与 LLM(大型语言模型)驱动的应用程序进行通信。Chainlit 旨在帮助开发者快速构建基于…

如何知道一个字段在selenium中是否可编辑?

这篇文章将检查我们如何使用Java检查selenium webdriver中的字段是否可编辑。 我们如何知道我们是否可以编辑字段?“readonly”属性控制字段的可编辑性。如果元素上存在“readonly”属性,则无法编辑或操作该元素或字段。 因此,如果我们找到一…

强大的开源网络攻击面分析工具:Hetty

Hetty:深入网络的每一个角落,Hetty让安全漏洞无处遁形。- 精选真开源,释放新价值。 概览 Hetty作为一个专为网络攻击面分析而设计的开源HTTP/1.1客户端,其设计初衷是为了帮助安全研究人员和渗透测试人员深入挖掘潜在的网络漏洞。…

[网鼎杯 2020 朱雀组]Nmap(详细解读版)

这道题考察nmap的一些用法,以及escapeshellarg和escapeshellcmd两个函数的绕过,可以看这里PHP escapeshellarg()escapeshellcmd() 之殇 (seebug.org) 两种解题方法: 第一种通过nmap的-iL参数读取扫描一个文件到指定文件中第二种是利用nmap的参数写入we…

NTC测温

前言 假设已知ad-温度转换表ad_table[100]; 数组元素ad_table[0] ~ ad_table[99] 对应温度0 ~ 99℃;已知MCU检测到NTC两端电压ad值位temp_ad,请写出将temp_ad转换成温度值的程序代码,要求温度值精确到0.1℃ 代码 为了将AD值转换为精确到0.1℃的温度值…

AMQP-核心概念-5

本文参考以下链接摘录翻译: https://www.rabbitmq.com/tutorials/amqp-concepts 消息确认(Message Acknowledgements) 消费者应用,就是接收和处理消息的应用。它们偶尔会处理个别消息失败,断开与服务器之间的连接或许…

数据库基础--概念模型

文章目录 概念模型回顾概念结构设计基本概念概念模型中的几个基本概念联系——实体集之间的对应关系讨论:怎样寻找信息世界中的实体和联系?实体和联系的举例概念模型的设计概念模型的设计方法与步骤概念结构设计步骤合并E-R图时的冲突解决方法练习&#…