ProtoBuf介绍及安装

news2024/11/14 20:50:06

文章目录

    • 序列反序列化
    • ProtoBuf特点
    • 安装ProtoBuf
      • windows
      • Ubuntu
      • Centos

序列反序列化

在网络传输过程当中,可以理解为:

  • 发送方
  • 接收方

它们彼此要通信,先要定好一个规则,也就是协议,双方都能认识的结构化数据(C++中的对象)。

网络传输,传输的是二进制序列,将结构化对象转换成二进制序列,叫做序列号;将二进制序列恢复成对象,叫做反序列化。

此外,将内存级数据持久化保存到磁盘当中,这个过程也需要序列化。

更详细可以看此篇文章:Linux网络编程——序列反序列化


现在较为主流的序列化工具有Json、Xml以及此篇介绍的ProtoBuf(protocol buffer)

ProtoBuf特点

本身特点:

  • 语言无关、平台无关:支持C++、Python、Java等多种语言,支持多个平台
  • 高效:比XML更小、更快、更简单
  • 扩展性、兼容性好:可以更新数据结构,而不影响原有的旧程序

使用特点:

  • ProtoBuf需要依赖提供编译生成的头文件和源文件来使用的

如何理解这句话:

正常情况:

class xx
{
 定义属性字段
 处理字段的方法
 处理类的方法:序列、反序列
}

PB:

message xx
{
 定义属性字段 
}

ProtoBuf为我们提供了一个编译器,通过编译,将这份message编译成对应的语言,里面包含了:

  • 类的字段定义
  • 处理字段的方法
  • 处理类的方法

这都是一键生成。

image-20240922201034646

有了代码生成机制,开发者就无需再编写解析协议的代码了。

安装ProtoBuf

windows

下载地址:Release Protocol Buffers v21.1 · protocolbuffers/protobuf (github.com)

根据电脑配置选择win32或者win64

image-20240922201610327

下载解压完毕之后:

image-20240922201808517

我们需要的是bin目录下的protoc.exe,将其配置在环境变量下(这个就不多说了哈)。

在终端输入protoc --version,有显示版本号表明成功

image-20240922202217488

Ubuntu

安装依赖库:

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

还是刚刚那个地址:Release Protocol Buffers v21.1 · protocolbuffers/protobuf (github.com)

image-20240922202456208

all表示支持所有语言,如果只想C++/Java,选择指定的即可

image-20240922202657583

wget下载:

wget https://github.com/protocolbuffers/protobuf/releases/download/v21.1/protobuf-all-21.1.zip

解压:

unzip protobuf-all-21.1.zip

进入目录之后,编译protobuf

  1. autogen.sh

    如果是指定的某一面语言,则不需要此步

    image-20240922204655949

  2. 执行configure,有2种方式,任选其一:

    • ./configure(默认安装在/usr/local目录,libbin都是分散的)
    • ./configure --prefix=/usr/local/protobuf(统一安装在/usr/local/protobuf

    image-20240922205115238

  3. make(时间较长)
    image-20240922205200158

  4. make check(时间较长)
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    有可能出现这种情况:

    在这里插入图片描述

    这是因为test模块的测试用例太多了,需要增大服务器swap分区,可参考此篇文章:

    Ubuntu 18.04 swap分区扩展_ubuntu18.04 如何查看swapfile文件路径

    可以先尝试3g,不行5g,再不行7g

  5. sudo make install

  6. 如果只执行./configure的时候,是按默认目录安装,此时就能直接使用protobuf
    如果是指定路径,还需要在/etc/profile添加内容:

    #(动态库搜索路径)程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
    #(静态库搜索路径)程序编译期间查找动态链接库时指定查找共享库的路径
    export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
    #执行程序搜索路径
    export PATH=$PATH:/usr/local/protobuf/bin/
    #c程序头文件搜索路径
    export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/
    #c++程序头文件搜索路径
    export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
    #pkg-config路径
    export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/
    
  7. 执行source /ect/profile

最后输入protoc --version,查看版本,有显示表面安装成功
在这里插入图片描述

Centos

安装依赖库:

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

其他就和Ubuntu类似了

目前Centos停止维护了,建议后续开发采用Ubuntu

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

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

相关文章

Linux C——网络编程

本案例运行环境:Ubuntu 12.04.1 LTS 1、基本概念 网络的七层模型: 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 其中:1、2、3层主要面向通过网络端到端的数据流, 4、5、6、7层定义了程序的功能 …

静态链接和动态链接的Golang二进制文件

关注TechLead,复旦博士,分享云服务领域全维度开发技术。拥有10年互联网服务架构、AI产品研发经验、团队管理经验,复旦机器人智能实验室成员,国家级大学生赛事评审专家,发表多篇SCI核心期刊学术论文,阿里云认…

李沐 模型选择、过拟合和欠拟合相关代码【动手学深度学习v2】

多项式回归 生成数据集 给定x,我们将使用以下三阶多项式来生成训练和测试数据的标签: y=5+1.2x−3.4+5.6+ϵ where ϵ∼( ). 噪声项ϵ服从均值为0且标准差为0.1的正态分布。 在优化

GraphRAG与VectorRAG我都选:HybridRAG

从金融应用中产生的非结构化文本数据(如财报电话会议记录)提取和解释复杂信息,即使采用当前最佳实践使用检索增强生成(RAG)技术,对于大型语言模型(LLMs)来说仍存在重大挑战。这些挑战…

【游戏党必看】2024年最适合玩游戏的电脑系统推荐!

许多玩家都在问如果在电脑上玩游戏装什么系统好呢?以下系统之家小编给大家推荐两款专门为游戏玩家打造的操作系统,针对大型游戏进行了深度优化,显著提升了系统性能,确保游戏运行更为流畅无阻,能完美兼容各种类型的游戏…

三好夫人|最强“逼”婚神器,送完一次就领证

三好夫人|揭秘最强“逼”婚神器,让你的爱情甜蜜升级,速领见家长通行证! 男人们请记住,如果一个女生给你送三好夫人,那么你赶快带她见家长把婚事定了。 在这个快节奏的时代,爱情似乎也被按下了快…

基于51单片机的电机控制和角度检测

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,采用滑动变阻器连接ADC0832数模转换器模拟角度传感器,然后通过LCD1602显示数值,然后按键按下不动,电机正转,松开停止。第二…

显示和隐藏图片【JavaScript】

使用 JavaScript 来实现显示和隐藏图片。下面是一个简单的示例&#xff0c;展示如何通过按钮点击来切换图片的可见性。 实现效果: 代码&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name&…

神奇的交互!Ethernet IP转Profinet网关与发那科机器人的数据交互

在当今的工业领域&#xff0c;随着自动化程度的不断提高&#xff0c;工业化升级已成为必然趋势。在这个过程中&#xff0c;对机器人的联网需求变得日益迫切。机器人作为工业生产中的重要组成部分&#xff0c;其高效运行和与其他设备的协同工作对于提高生产效率至关重要。然而&a…

EI-Bisynch协议

EI-Bisynch&#xff08;Extended Interface-Bisynchronous&#xff09;协议是一种早期用于设备通信的协议&#xff0c;主要用于工业控制系统中的串行通信。随着技术的发展&#xff0c;EI-Bisynch的使用已经大幅减少&#xff0c;逐渐被更现代化、灵活性更高的通信协议&#xff0…

【Linux】手把手教你制作一个简易shell——(进程创建fork进程替换wait与进程等待exec的应用)(自定义shell程序设计)

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

华为昇腾智算中心-智算中心测试方案与标准

本方案是企业内训课程《华为昇腾智算中心深度技术研修》的一部分授课课件的样例。方案内容中详细阐述了华为昇腾环境下智算中心的测试方案和标准&#xff0c;以确保硬件和软件系统在实际部署和运行中的高效性和稳定性。主要内容包括集群硬件清单、节点拓扑配置以及环境配置。硬…

企业微信oauth2的code换用户身份一直40029解决方案

序&#xff1a; 雪狼的微信表情包&#xff0c;欢迎下载【程序员雪狼】微信表情 - 来自微信表情商店&#xff0c;扫二维码下载表情 正文&#xff1a; 雪狼在用oauth2返回的code要去请求getuserinfo3rd接口的时候&#xff0c;报错如下40029 一样&#xff0c;肝了一天&#xff0c…

本地部署高颜值某抑云音乐播放器Splayer并实现无公网IP远程听歌

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

湖北建筑类初级职称申报的全方位解读

湖北建筑类初级职称申报的全方位解读 湖北工程行业助理工程师/初级职称申报评审 湖北建筑类助理工程师/初级职称正常申报目前都是电子版证书&#xff0c;湖北省政务服务网查询生成&#xff0c;省网查询&#xff0c;后期都会同步G网查询。 湖北建筑类助理工程师纸质版 1.之前申…

kubernetes网络(一)之calico详解

摘要 本文介绍Kubernetes最流行的网络解决方案calico。 kubernetes中不同宿主上的pod需要相互通信&#xff0c;如果按TCP/IP协议分层进行分类&#xff1a; 二层方案&#xff1a;flannel的udp和vxlan模式 三层方案&#xff1a;flannel的host-gw模式&#xff1b;calico的IPIP模…

ReduceLROnPlateau学习率衰减设置

学习率衰减有多种方式&#xff0c;本次采用optim.lr_scheduler.ReduceLROnPlateau&#xff0c;这种方式代表在发现loss不再降低或者acc不再提高之后&#xff0c;降低学习率。 model GRU().to(device) criterion nn.CrossEntropyLoss().to(device) optimizer optim.AdamW(m…

YOLOv10独家改进:红外场景严重遮挡和重叠目标解决方案 | 一种新的自适应算法轻量级通道分割和变换(ALSS)模块,自适应特征提取优化策略

💡💡💡本文解决什么问题:红外检测场景存在严重遮挡和重叠目标时的局限性的问题点。 💡💡💡提出了一种新的自适应算法轻量级通道分割和变换(ALSS)模块。该模块采用自适应信道分裂策略优化特征提取,并集成信道变换机制增强信道间的信息交换。这改善了模糊特征的提…

简单多状态dp第一弹 leetcode -面试题17.16.按摩师 -213.打家劫舍II

a​​​​​​​面试题 17.16. 按摩师 按摩师 题目: 分析: 使用动态规划解决 状态表示: dp[i] 表示&#xff1a;选择到 i 位置时&#xff0c;此时的最长预约时长。 但是我们这个题在 i 位置的时候&#xff0c;会面临 选择 或者 不选择 两种抉择&#xff0c;所依赖的状态需要…

响应式的几种解决方案——媒体查询、flex、grid、多列布局、瀑布流和数据可视化屏幕的缩放处理

media媒体查询 媒体查询入门指南 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document<…