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

news2024/11/15 2:03:08

这里写自定义目录标题

  • 一、准备
    • 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;	// 锁体Id
    string user_id              = 2;	// 用户Id
    uint32 protocol_version     = 3;	// 协议版本号
    uint32 random               = 4;	// 随机数1
}

// cmd= 0x8001
message LinkReq_Ack {
    string lock_id              = 1;	// 锁体Id
    uint32 protocol_version     = 2;	// 协议版本号
    uint32 random               = 3;	// 随机数2
    bytes 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 EnableDelayedExpansion

set project_name=batTestProto

set 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.h

protoc --cpp_out=./ %project_name%.proto

pause

双击后,发现已自动生成.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.coloradmin.cn/o/1945142.html

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

相关文章

代码随想录——零钱兑换Ⅱ(Leetcode518)

题目链接 完全背包 class Solution {public int change(int amount, int[] coins) {int[] dp new int[amount 1];dp[0] 1;for(int i 0; i < coins.length; i){for(int j coins[i]; j < amount; j){dp[j] dp[j - coins[i]];}}return dp[amount];} }本题为组合问题…

MySQL 约束 (constraint)

文章目录 约束&#xff08;constraint)列级约束和表级约束给约束起名字&#xff08;constraint)非空约束&#xff08;no null)检查约束&#xff08;check)唯一性约束 (unique)主键约束 (primary key)主键分类单一主键复合主键主键自增 &#xff08;auto_increment) 外键约束外什…

【IEEE出版 | 广东省高校联合主办】第六届物联网、自动化和人工智能国际学术会议(IoTAAI 2024,7月26-28)

第六届物联网、自动化和人工智能国际会议&#xff08;IoTAAI 2024&#xff09;将于2024年07月26-28日在中国广州召开。 会议旨在拓展国际科技学术交流渠道&#xff0c;搭建学术资源共享平台&#xff0c;促进全球范围内的科技创新&#xff0c;提升中外学术合作。会议还鼓励不同领…

BGP选路之Preferred value

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较&#xff0c;以确定去往该目标网络的最优BGP路由&#xff0c;然后将该最优BGP路由与去往同一目标网络的其他协议路由进行比较&#xff0c;从而决定是否将该最优…

FliFlik KleanOut for Photo 的妙用

FliFlik KleanOut for Photo 是一款专业的图像水印去除软件&#xff0c;旨在帮助用户快速高效地去除照片中的水印标识。无论是文本水印还是图像水印&#xff0c;该软件都能有效识别并删除&#xff0c;保持图像原始清晰度和质量。它采用 AI 算法引擎&#xff0c;可以精准识别和删…

MongoDB教程(十六):MongoDB高级索引

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、全文索…

最简单的typora+gitee+picgo配置图床

typoragiteepicgo图床 你是否因为管理图片而感到头大&#xff1f;是时候了解一下 Typora、Gitee 和 PicGo 这个超级三剑客了&#xff0c;它们可以帮你轻松打造自己的图床&#xff0c;让你的博客图片管理变得简单又有趣。让我们开始这场神奇的图床之旅吧&#xff01; Typora …

大型语言模型的生物医学知识图优化提示生成

大型语言模型的生物医学知识图优化提示生成 https://arxiv.org/abs/2311.17330 https://github.com/BaranziniLab/KG_RAG 大型语言模型的生物医学知识图优化提示生成 摘要 KG-RAG框架&#xff0c;较好的结合了生物医学知识图谱SPOKE和LLM的优势。SPOKE是一个开放知识图谱&…

聚焦保险行业客户经营现状,概述神策数据 CJO 解决方案

触点红利时代&#xff0c;企业的经营需求从「深度的用户行为分析」转变为「个性化、全渠道一致的客户体验」。客户旅程编排&#xff08;Customer Journey Orchestration&#xff0c;简称 CJO&#xff09;从体验出发&#xff0c;关注客户需求、感受和满意度&#xff0c;能够帮助…

04 HTML CSS JavaScript

文章目录 HTML1、HTML介绍2、快速入门3、基础标签4、图片、音频、视频标签5、超链接标签6、列表标签7、表格标签8、布局标签9、 表单标签 CSS1、 概述2、 css 导入方式3、 css 选择器4、 css 属性 JavaScript1、JavaScript简介2、JavaScript引入方式3、JavaScript基础语法4、Ja…

Adobe Audition(AU)安装包软件下载

目录 一、下载 二、AU软件介绍 三、使用技巧 四、快捷键操作 常用快捷键&#xff1a; 一、下载 链接https://pan.baidu.com/s/1Ax9pro_Q75YgLYaKDzZg8w?pwd3mi1 二、AU软件介绍 Adobe Audition是一个专业级的音频工作站&#xff0c;适用于音乐制作、广播、播客、视频后…

C#数组复习

一、一维数组 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ShuZu : MonoBehaviour {#region 知识点一 基本概念//数组是存储一组相同类型数据的集合//数组分为 一维、二维、交错数组//一般情况 一维数组 就简称为数组#en…

Onenet模拟Mqtt调试物联网设备

本章节目录 一.调试器模拟设备登录 二.调试器模拟上传数据 三.调试器接受下发控制消息 一.调试器模拟设备登录(让设备处于在线状态) 1.打开文档中心(open.iot.10086.cn) 2,Onenet物联网开放平台 3.产品开发,设备接入->设备开发 4.mqtt协议接入->最佳实践 5.物模型数据交…

样式迁移及代码

一、定义 1、使用卷积神经网络&#xff0c;自动将一个图像中的风格应用在另一图像之上&#xff0c;即风格迁移&#xff1b;两张输入图像&#xff1a;一张是内容图像&#xff0c;另一张是风格图像。 2、训练一些样本使得样本在一些cnn的特征上跟样式图片很相近&#xff0c;在一…

PHP教程002:PHP变量介绍

文章目录 一、PHP程序1、PHP标记2、PHP代码3、语句结束符;4、注释 二、PHP变量2.1 声明变量2.2 赋值运算符3、变量命名规则 一、PHP程序 PHP文件的默认扩展名是".php"PHP文件可以包含html、css、js 序号组成描述1<?php ... ?>PHP标记2PHP代码函数、数组、流…

二、原型模式

文章目录 1 基本介绍2 实现方式深浅拷贝目标2.1 使用 Object 的 clone() 方法2.1.1 代码2.1.2 特性2.1.3 实现深拷贝 2.2 在 clone() 方法中使用序列化2.2.1 代码 2.2.2 特性 3 实现的要点4 Spring 中的原型模式5 原型模式的类图及角色5.1 类图5.1.1 不限制语言5.1.2 在 Java 中…

Java之集合底层-数据结构

Java集合之数据结构 1 概述 数据结构是计算机科学中研究数据组织、存储和操作的一门学科。它涉及了如何组织和存储数据以及如何设计和实现不同的数据操作算法和技术。常见的据结构有线性数据结构&#xff08;含数组、链表、栈和队列等&#xff09;&#xff0c;非线性数据结构…

四、GD32 MCU 常见外设介绍(1)RCU 时钟介绍

系统架构 1.RCU 时钟介绍 众所周知&#xff0c;时钟是MCU能正常运行的基本条件&#xff0c;就好比心跳或脉搏&#xff0c;为所有的工作单元提供时间 基数。时钟控制单元提供了一系列频率的时钟功能&#xff0c;包括多个内部RC振荡器时钟(IRC)、一个外部 高速晶体振荡器时钟(H…

Meta发布最强AI模型,扎克伯格公开信解释为何支持开源?

凤凰网科技讯 北京时间7月24日&#xff0c;脸书母公司Meta周二发布了最新大语言模型Llama 3.1&#xff0c;这是该公司目前为止推出的最强大开源模型&#xff0c;号称能够比肩OpenAI等公司的私有大模型。与此同时&#xff0c;Meta CEO马克扎克伯格(Mark Zuckerberg)发表公开信&a…

力扣1792.最大平均通过率

力扣1792.最大平均通过率 每个班级加上一个人以后得通过率增量不同 将优先级最高的班级放队列顶&#xff0c;每次操作即可 class Solution {public:struct Radio{int pass;int total;//满足该条件 oth的优先级更高bool operator < (const Radio& oth)const{return (l…