visual studio 2022配置和使用protobuf

上图证明,我真的测了好多遍,测了好多版本的protobuf,花了很多时间。不过好在最后在vs2022上测通了。

下载protobuf

这里是protobuf下载的地址。

Releases · protocolbuffers/protobuf · GitHub

个人使用的3.21.9这个版本才跑通的。

1、首先解压protobuf-cpp-3.21.9.zip文件,得到protobuf-cpp-3.21.9文件

2、进入protobuf-cpp-3.21.9文件,创建一个visual studio文件夹

下载cmake工具

cmake是一款十分强大的开源跨平台的构建工具,我们需要使用它构建库文件。

大家可以去官网下载,下边是网址:

Download CMake

生成库文件

1、下载完成之后,打开cmake工具

2、where is the source code选择我们刚刚加压的protobuf-cpp-3.21.9文件夹下的cmake文件夹

3、where to build the binaries选择protobuf-cpp-3.21.9文件下创建的visual studio文件夹

4、点击configure配置我们需要生成项目文件,我们选择visual studio 17 2022即可

configure完成之后,选中你需要生成的文件,下边框框是我选中的生成文件,然后再次点击configure,generate就完成了。

观察下边的提示信息,就表示构建完成了。然后进入protobuf-cpp-3.21.9文件下创建的visual studio文件夹,就有生成好的文件了。

然后带点击打开protobuf.sln项目文件

编译时可以选择debug和release,建议每一个都编译一遍,这样就有debug和release两个版本的库了。
我选择的是X64位的debug模式编译,生成的库在visualstudio目录下的Debug文件夹里。选择重新编译。这个过程可能需要几分钟。

到这里,我们的库文件就生成成功了。

这里就是生成的库文件位置。

在当前路径进入cmd,输入protoc --version命令,检测库文件生成成功的效果如下。

添加环境变量

创建一个protoc文件夹,进入protoc文件下创建一个bin和include文件夹

将visualstudio目录下的Debug文件夹下的下边几个库文件拷到bin文件夹下

将protobuf-3.21.9文件夹下的src文件的下的google文件拷贝至include文件下。

设置环境,把新建的bin路径写在新建的路径下。最后点击确定

检测环境变量是否设置成功。

打开终端输入protoc --version

这就表示环境变量配置成功了。

使用protobuf

首先使用visual studio创建一个新的项目文件,打开其项目文件,创建一个msg.proto文件

msg.proto文件中输入以下代码,这里代码语法是protobuf3的语法,感兴趣的人可以去了解下。

在文件目录下按住shift+右键,点击powershell窗口。输入protoc  --cpp_out=. ./msg.proto,然后回车

接下来文件目录会出现新的文件如下

在vs中右键添加现存文件,把刚刚生成的新文件添加进来

visual studio配置

配置项目的包含路径和库文件路径,这里的包含路径和库文件路径,就是我们刚刚创建的include和bin路径。

添加链接库,添加protobuf用到的lib库

配置代码生成的运行库,我们这里用的是多线程调试MDd。

这是引入proto文件生成的头文件点击编译。出现报错

在头文件中添加

#define PROTOBUF_USE_DLLS再次编译文件。

这里就编译完成了,就能正常的使用protobuf了。

编写实例代码

#include <iostream>
#include "msg.pb.h"
int main()
{
    //std::cout << "Hello World!\n";
    Msg msg;
    msg.set_name("CPP programing");
    msg.set_age(1);
    std::string msgstr;
    msg.SerializeToString(&msgstr);
    std::cout << "serialize str is " << msgstr << std::endl;
    Msg msg2;
    msg2.ParseFromString(msgstr);
    std::cout << "msg2 name is " << msg2.name() << " age is "
        << msg2.age() << std::endl;
    getchar();
}

运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Lesson 48 Do you like ... ? Do you want ... ?

Lesson 48 Do you like … ? Do you want … ? 词汇 fresh a. 新鲜的【食物】 搭配&#xff1a;fresh water 淡水    fresh man 新生    fresh air 新鲜空气    fresh egg 新鲜鸡蛋 例句&#xff1a;我们喜欢新鲜的空气。    We like fresh egg. egg n. 蛋【通…

unity知识点 专项四 一文彻底说清楚(锚点(anchor)、中心点(pivot)、位置(position)之间的关系)

一 概述 想要使UI控件在屏幕中达到正确的显示效果&#xff0c;比如自适应屏幕尺寸、固定边距等等&#xff0c;首先要理清楚几个基本概念和设置&#xff1a;锚点(anchor)、中心点(pivot)、位置(position)、UI缩放模式、父物件的transform设置 二 Anchor、Pivot与Position 2…

Qualcomm QCA206x EasyMesh For Ubuntu

1. 引言 关于EasyMesh概念我们这里就不再过多的赘述&#xff0c;此篇文档的目的是&#xff0c;让广大初学者&#xff0c;有一个很方便的平台进行EasyMesh的学习和测试。 2. X86 Ubuntu平台 2.1 硬件环境准备 备注&#xff1a;QCA206x WiFi module推荐使用移远的FC64E/FC66E。…

代码随想录算法训练营第74天:路径总结[1]

代码随想录算法训练营第74天&#xff1a;路径总结 ‍ A * 算法精讲 &#xff08;A star算法&#xff09; 卡码网&#xff1a;126. 骑士的攻击(opens new window) 题目描述 在象棋中&#xff0c;马和象的移动规则分别是“马走日”和“象走田”。现给定骑士的起始坐标和目标…

细说MCU的ADC模块单通道连续采样的实现方法

目录 一、工程依赖的硬件及背景 二、设计目的 三、建立工程 1、配置GPIO 2、选择时钟源和Debug 3、配置ADC 4、配置系统时钟和ADC时钟 5、配置TIM3 6、配置串口 四、代码修改 1、重定义TIM3中断回调函数 2、启动ADC及重写其回调函数 3、定义用于存储转换结果的数…

【深度学习练习】心脏病预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、什么是RNN RNN与传统神经网络最大的区别在于&#xff0c;每次都会将前一次的输出结果&#xff0c;带到下一隐藏层中一起训练。如下图所示&#xff1a; …

macOS版ChatGPT更新:修复AI对话纯文本存储问题

猫头虎 &#x1f42f; 建联猫头虎&#xff0c;商务合作&#xff0c;产品评测&#xff0c;产品推广&#xff0c;个人自媒体创作&#xff0c;超级个体&#xff0c;涨粉秘籍&#xff0c;一起探索编程世界的无限可能&#xff01; macOS版ChatGPT更新&#xff1a;修复AI对话纯文本…

C++ 空间和时间高效的二项式系数(Space and time efficient Binomial Coefficient)

这里函数采用两个参数n和k&#xff0c;并返回二项式系数 C(n, k) 的值。 例子&#xff1a; 输入&#xff1a; n 4 和 k 2 输出&#xff1a; 6 解释&#xff1a; 4 C 2 等于 4!/(2!*2!) 6 输入&#xff1a; n 5 和 k 2 输出&#xff1a; 10 解释&#xff1a; 5 C …

maven项目、idea抽风问题解决

开发的时候遇到奇奇怪怪的非技术问题&#xff0c;解决起来会费时间&#xff0c;做无用功。   这里记录常见的情况和解决方法 1.未识别maven项目 文件的图标变成了这种橙色的&#xff0c;而且有主启动函数也不能run 右键pom文件&#xff0c;点击Add as Maven Project 如果…

揭开梵蒂冈秘密档案馆的神秘面纱

关注我们 - 数字罗塞塔计划 - PART 01 深邃的历史 梵蒂冈秘密档案馆起源于公元8世纪&#xff0c;负责保存官方文书和教皇书信。9世纪开始在圣彼得大教堂设立档案库&#xff0c;负责保管外交和法律文件&#xff0c;在帕拉蒂诺山塔内保存经济和行政方面的档案。11至13世纪&…

SpringBoot AOP面向切面编程 基础

介绍 在 Spring Boot 中&#xff0c;AOP&#xff08;面向切面编程&#xff09;是一种强大的技术&#xff0c;它允许你在应用程序中横切关注点&#xff0c;比如日志记录、事务管理、性能监控等&#xff0c;从而避免重复代码和混乱 可以记录操作日志 权限控制 。 依赖 <dep…

HTMLCSS(入门)

HTML <html> <head><title>第一个页面</title></head><body>键盘敲烂&#xff0c;工资过万</body> </html> <!DOCTYPE>文档类型声明&#xff0c;告诉浏览器使用哪种HTML版本显示网页 <!DOCTYPE html>当前页面采取…

go语言day08 泛型 自定义错误处理 go关键字:协程

泛型&#xff1a; 抛错误异常 实现error接口类型 用java语言解释的话&#xff0c;实现类需要重写error类型的抽象方法Error().这样就可以自定义异常处理。 回到go语言&#xff0c;在Error()方法中用*argError 这样一个指针类来充当error接口的实现类。 在f2()方法中定义返回值…

本地部署秘塔开源搜索引擎

秘塔AI搜索是由秘塔科技于2024年初推出的一款新型搜索引擎&#xff0c;被业界誉为“中国版的Perplexity”。秘塔科技成立于2018年4月&#xff0c;其核心团队包括CEO闵可锐、技术专家唐悦和首席运营官王益为等。秘塔AI搜索以其高效简洁的特点受到关注&#xff0c;其搜索结果直接…

累积分布函数的一些性质证明

性质1&#xff1a; E [ X ] ∫ 0 ∞ ( 1 − F ( x ) ) d x − ∫ − ∞ 0 F ( x ) d x ( 1 ) E[X]\int_0^{\infty}(1-F(x))dx - \int_{-\infty}^0F(x)dx\quad (1) E[X]∫0∞​(1−F(x))dx−∫−∞0​F(x)dx(1) 证明&#xff1a; E [ X ] ∫ − ∞ ∞ x p ( x ) d x E[X] …

ETCD 基本介绍与常见命令的使用

转载请标明出处&#xff1a;https://blog.csdn.net/donkor_/article/details/140171610 文章目录 一、基本介绍1.1 参考1.2 什么是ETCD1.3 ETCD的特点1.4 ETCD的主要功能1.5 ETCD的整体架构1.6 什么时候用ETCD&#xff0c;什么时候用redis 二、安装三、使用3.1 etcdctl3.2 常用…

审核平台前端新老仓库迁移

背景 审核平台接入50业务&#xff0c;提供在线审核及离线质检、新人培训等核心能力&#xff0c;同时提供数据报表、资源追踪、知识库等工具。随着平台的飞速发展&#xff0c;越来越多的新业务正在或即将接入审核平台&#xff0c;日均页面浏览量为百万级别。如今审核平台已是公司…

[Redis]哨兵机制

哨兵机制概念 在传统主从复制机制中&#xff0c;会存在一些问题&#xff1a; 1. 主节点发生故障时&#xff0c;进行主备切换的过程是复杂的&#xff0c;需要人工参与&#xff0c;导致故障恢复时间无法保障。 2. 主节点可以将读压力分散出去&#xff0c;但写压力/存储压力是无法…

直击园区消防管理现状,智慧消防相比传统消防管理的优势是什么

一、工业园区消防管理现状 1、消防信息智能化程度低 信息化手段落后&#xff0c;现场的数据信息无法即时传送至指挥中心&#xff0c;突发事件发生时&#xff0c;无法扁平化指挥到基层现场&#xff0c;应急处置能力不足。 2、防控体系不健全 存在监测盲点&#xff0c;火灾报警…

Mybatis实现RBAC权限模型查询

RBAC权限模型 Role-Based Access Control&#xff0c;中文意思是&#xff1a;基于角色&#xff08;Role&#xff09;的访问控制。这是一种广泛应用于计算机系统和网络安全领域的访问控制模型。 简单来说&#xff0c;就是通过将权限分配给➡角色&#xff0c;再将角色分配给➡用…