【ProtoBuf】ProtoBuf基础与安装

news2024/11/25 4:39:02

本篇文章介绍 C++ 使用方向

文章目录

  • ProtoBuf简介
  • ProtoBuf安装
    • Windows
    • Linux

ProtoBuf简介

ProtoBuf(全称为 Protocol Buffer)是一种序列化结构数据的方法
序列化是将对象转换为可存储的或传输的格式的过程,通常用于数据交换或持久化存储。我们在C++/Java中编写的类不适合直接进行存储或者传输,需要转换为字节序列
常见的序列化格式包括Json、XML,二者是具有一定规则的字符串和二进制格式

ProtoBuf 类比与 XML,是一种灵活,高效,自动化机制的结构数据序列化方法,但是比 XML 更小、更快、更简单,因为其使用二进制存储

ProtoBuf 的优点

  • 语言无关、平台无关:ProtoBuf 支持C++、Java、Python 等多种语言,支持多个平台,Windows、Linux、Mac
  • 高效:序列化反序列化速度很快,快于Json的处理速度;序列化后的体积相比Json和XML更小,适合网络传输
  • 扩展性、兼容性好:可以更新数据结构,而不影响和破坏原有的旧程序

ProtoBuf 的缺点

  • 应用不够广(相比XML和Json)
  • 二进制格式可读性差

ProtoBuf 的使用
常规的类框架如下:
在这里插入图片描述

而ProtoBuf 通过 protoc 编译器根据属性帮我们自动生成 get/set方法序列化反序列化方法
protoc 编译器编译.proto文件,生成对应语言的库文件/包供我们使用
在这里插入图片描述
流程如下:

  1. 编写.proto文件,定义结构对象(message)及属性内容,相当于class
  2. 使用protoc编译器编译.proto文件,生成一系列接口代码,存放在新生成的头文件和源文件中
  3. 依赖生成的接口,将编译生成的头文件包含进我们的代码中,实现对 .proto 文件中定义的字段进行设置和获取,和对 message 对象进行序列化和反序列化

总的来说:ProtoBuf 是需要依赖通过编译生成的头文件和源文件来使用的

ProtoBuf安装

Windows

下载 ProtoBuf 编译器:https://github.com/protocolbuffers/protobuf/releases

在这里插入图片描述

下载后将压缩包解压到本地目录下。解压后的文件内包含 bin、include文件
在这里插入图片描述

配置环境变量,如此可以找到protoc编译器
把解压后文件的bin目录的路径配置到系统环境变量的Path中
在这里插入图片描述
检查是否配置成功:
打开cmd,输入

protoc --version #查看版本

有显示版本说明成功
在这里插入图片描述

Linux

下载 ProtoBuf 前一定要安装依赖库:autoconf automake libtool curl make g++ unzip
如未安装,安装命令如下:

Ubuntu

sudo apt-get install autoconf automake libtool curl make g++ unzip -y

CentOS

sudo yum install autoconf automake libtool curl make gcc-c++ unzip

下载 ProtoBuf 编译器:https://github.com/protocolbuffers/protobuf/releases

在这里插入图片描述
选择合适的版本,右键复制链接
后续命令如下:

#下载
wget [链接]
#解压
unzip [压缩包]

安装ProtoBuf
进入解压好的文件,执行如下命令:

# 第⼀步执⾏autogen.sh,但如果下载的是具体的某⼀⻔语⾔,不需要执⾏这⼀步。
./autogen.sh 
 
# 第⼆步执⾏configure,有两种执⾏⽅式,任选其⼀即可,如下:
# 1、protobuf默认安装在 /usr/local ⽬录,lib、bin都是分散的
./configure 
# 2、修改安装⽬录,统⼀安装在/usr/local/protobuf下
./configure --prefix=/usr/local/protobuf

再依次执行

make 		#执行15分钟左右
make check  #执行15分钟左右
sudo make install

如果在make check出现错误,例如:
在这里插入图片描述
出现以上错误的原因是test的模块⾥⾯有⾮常多的测试⽤例,这些⽤例对服务器环境要求特别严格,需要增⼤下swap分区,具体操作可参考:
https://blog.csdn.net/AlexWang30/article/details/90341172
https://blog.csdn.net/nibiewuxuanze/article/details/127980216
(建议先扩大到3G,再执行make check,不行就5G,再不行就8G,博主是8G才可以)
执行make check,出现以下内容就可以执行sudo make install
在这里插入图片描述
到此,如果在执行./configure时,选择了第⼀种执行方式,那么到这就可以正常使用 protobuf 了。如果选择了第⼆种执行方式,即修改了安装⽬录,那么还需要在 /etc/profile 中添加⼀些内容:

sudo vim /etc/profile

#将如下内容写入文件中

#(动态库搜索路径)程序加载运⾏期间查找动态链接库时指定除了系统默认路径之外的其他路径
exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
#(静态库搜索路径)程序编译期间查找动态链接库时指定查找共享库的路径
exportLIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
#执⾏程序搜索路径
exportPATH=$PATH:/usr/local/protobuf/bin/
#c程序头⽂件搜索路径
exportC_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/
#c++程序头⽂件搜索路径
exportCPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
#pkg-config路径
exportPKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/

写入后,保存退出,执行命令使配置生效

source /etc/profile

最后,到了激动人心的时间,检查是否安装成功
查看版本号

protoc --version

如果成功显示版本,说明安装成功,没有则还需要检查前面的哪部分出错了,祝安装一切顺利
在这里插入图片描述


以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

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

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

相关文章

JAVA-数据结构-排序

1.直接插入排序 1.原理&#xff1a;和玩扑克牌一样&#xff0c;从左边第二个牌开始&#xff0c;选中这个&#xff0c;和前面的所有牌比较&#xff0c;插在合适的位置 public static void insertsort(int[] arr){//直接插入排序for (int i 1; i < arr.length; i) {//此循环…

SSD融合FERPlus模型实现面部情绪识别

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…

帝国竞争主义算法(ICA)的MATLAB代码复现

目录 1 帝国竞争主义算法优化BP神经网络代码复现 2 帝国竞争主义算法优化支持向量机代码复现 3 帝国竞争主义算法优化长短期记忆神经网络代码复现 1 帝国竞争主义算法优化BP神经网络代码复现 1&#xff09;单输出回归预测&#xff1a;单输出回归预测&#xff1a;帝国主义竞…

API接口并发请求控制实现

文章目录 一、问题概述二、解决思路1. AtomicInteger2. LongAdder3. Semaphore4. 实现区别三、API接口并发控制1. 核心源码2. 源码放送 一、问题概述 某API接口&#xff0c;承载某重要业务&#xff0c;希望控制任意时间点的并发访问数在5以内&#xff0c;该如何实现&#xff1…

数据结构-5.5.二叉树的存储结构

一.二叉树的顺序存储&#xff1a; a.完全二叉树&#xff1a; 1.顺序存储中利用了静态数组&#xff0c;空间大小有限&#xff1a; 2.基本操作&#xff1a; (i是结点编号) 1.上述图片中i所在的层次后面的公式应该把n换成i(图片里写错了)&#xff1b; 2.上述图片判断i是否有左…

ThingsBoard规则链节点:JSON Path节点详解

引言 JSON Path节点简介 用法 含义 应用场景 实际项目运用示例 智能农业监控系统 工业自动化生产线 车联网平台 结论 引言 ThingsBoard是一个功能强大的物联网平台&#xff0c;它提供了设备管理、数据收集与处理以及实时监控等核心功能。其规则引擎允许用户通过创建复…

Java-学生管理系统[初阶]

这次我们来尝试使用Java实现一下"学生管理系统"&#xff0c;顾名思义&#xff0c;就是实现一个能用来管理学生各种数据的系统。在后续学习中我们将对"学生管理系统"进行两种实现&#xff1a; &#x1f4da; 学生管理系统[初阶](不带模拟登录系统) &#…

衡石分析平台系统管理手册-智能运维之系统日志

系统日志​ 点击系统设置->系统日志 在这个页面&#xff0c;从时间&#xff0c;操作者, IP&#xff0c;行为&#xff0c;结果&#xff0c;类别&#xff0c;对象&#xff0c;描述等方面记录了用户行为&#xff0c;系统管理员可以从此页面针对整个系统的用户行为进行审计工作…

【C++】set/map 与 multiset/multimap

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;C 个人主页&#xff1a;Celias blog~ 目录 ​编辑 序列式容器和关联式容器 一、set 1.1 set介绍 1.2 …

大健康零售电商的智囊团:知识中台的应用与影响

在数字化浪潮席卷各行各业的今天&#xff0c;大健康零售电商行业也在积极探索转型升级的新路径。知识中台&#xff0c;作为一种集知识管理、数据挖掘与智能化应用于一体的新型技术架构&#xff0c;正逐渐成为推动这一转型的关键力量。本文将深入探讨知识中台在大健康零售电商中…

Light灯光组件+组件的相关操作+游戏资源的加载

Light灯光组件 Type: Directional:平行光&#xff0c;模仿的是太阳光 Spot:聚光灯 Area:区域光 Color&#xff1a; 颜色值 Mode: RealTime:实时 Mix:混合 Baked:烘焙 Intersity: 光照强度 Indirect Multiplier:光照强度乘数 Shadow Type:影子设置&#xff1a;…

CV方法再学习

轻量化模型 Mobile系列(V1~V3) MobileNetV1 MobileNetV1之所以轻量&#xff0c;与深度可分离卷积的关系密不可分 深度可分离卷积 主要是两种卷积变体组合使用&#xff0c;分别为逐通道卷积&#xff08;Depthwise Convolution&#xff09;和逐点卷积&#xff08;Pointwise C…

Nginx UI 一个可以管理Nginx的图形化界面工具

Nginx UI 是一个基于 Web 的图形界面管理工具&#xff0c;支持对 Nginx 的各项配置和状态进行直观的操作和监控。 Nginx UI 的功能非常丰富&#xff1a; 在线查看服务器 CPU、内存、系统负载、磁盘使用率等指标 在线 ChatGPT 助理 一键申请和自动续签 Let’s encrypt 证书 在…

八、Python基础语法(判断语句-下)

一、if elif else 结构 应用场景&#xff1a;多个判断条件下&#xff0c;并且这些判断条件存在一定的关联。 语法&#xff1a; elif也是python中关键字&#xff0c;后面跟一个判断条件&#xff0c;判断条件后面跟冒号 存在冒号&#xff0c;需要换行缩进&#xff0c;处于elif…

金九银十软件测试面试题(800道)

今年你的目标是拿下大厂offer&#xff1f;还是多少万年薪&#xff1f;其实这些都离不开日积月累的过程。 为此我特意整理出一份&#xff08;超详细笔记/面试题&#xff09;它几乎涵盖了所有的测试开发技术栈&#xff0c;非常珍贵&#xff0c;人手一份 肝完进大厂 妥妥的&#…

QD1-P5 HTML 段落标签(p)换行标签(br)

本节视频 www.bilibili.com/video/BV1n64y1U7oj?p5 ‍ 本节学习 HTML 标签&#xff1a; p标签 段落br标签 换行 ‍ 一、p 标签-段落 1.1 使用 p 标签划分段落 <p>段落文本</p>示例 <!DOCTYPE html> <html><head><meta charset"…

算法剖析:滑动窗口

文章目录 前言一、长度最小的子数组二、无重复字符的最长子串三、最大连续1的个数 III四、将 x 减到 0 的最小操作数五、水果成篮六、找到字符串中所有字母异位词七、串联所有单词的子串八、最小覆盖子串总结 前言 滑动窗口可以看作为一种特殊的通向双指针&#xff0c;这两个指…

轻松翻译:顶尖翻译器评测!

在工作生活中如果遇到翻译需求&#xff0c;就少不了一些好用的翻译器&#xff0c;接下来是我们就来为大家推荐几款市面上口碑极佳的翻译软件&#xff01; 福昕在线翻译 直达链接&#xff1a; fanyi.pdf365.cn/ 操作教程&#xff1a;立即获取 福昕在线翻译是一款基于云端技…

关于部分股市买卖的演示和总结

本文是对上一文的补充&#xff1a;一个普通人的投资认知-CSDN博客 一、简介 假设公司A 向某交易所发行100股股票&#xff0c;每股5元&#xff0c;预计将融资500元。 股民a买了10股&#xff0c;付出50元。 股民b买了20股&#xff0c;付出100元。 股民c买了30股&#xff0c;付出…

【3维视觉】超级好用的3D模型交互式可视化工具viser

项目地址 https://github.com/nerfstudio-project/viser 功能 SMPL模型可视化编辑 点云可视化 3DGS实时渲染播放 安装和使用 安装viser git clone https://github.com/nerfstudio-project/viser.git使用 官方说明文档 1. SMPL模型可视化编辑 先下载SMPLX人体模型 下载解…