[ProtoBuf] 介绍 | 保姆级win/linux安装教程

目录

一、序列化概念

二、ProtoBuf 是什么

三、ProtoBuf 的使用特点

ProtoBuf 在不同操作系统下的安装

一、ProtoBuf 在 Windows 下的安装

二、ProtoBuf 在 Linux 下的安装

三、检查是否安装成功


安装教程 可以直接目录跳转到后面

笔记参考:官方文档


一、序列化概念

序列化和反序列化

  • 序列化:将对象转换为字节序列的过程称为对象的序列化。
  • 反序列化:将字节序列恢复为对象的过程称为对象的反序列化。

什么情况下需要序列化?

  • 存储数据当我们想把内存中的对象状态保存到一个文件中或者存到 数据库 中时,就需要进行序列化。
  • 网络传输虽然网络可以直接传输数据,但无法直接传输对象。因此,在传输前需要对对象进行序列化,在传输完成后进行反序列化以恢复对象。例如,在 socket 编程中发送与接收数据时就需要这样做。

如何实现序列化?

  • 可以通过多种方式实现序列化,包括 XML、JSON 和 Protocol Buffers(简称 ProtoBuf)等。

二、ProtoBuf 是什么

  • 根据官方定义,Protocol Buffers(ProtoBuf)是 Google 提供的一种语言无关、平台无关、可扩展的 序列化结构数据的方法 ,适用于通信协议、数据存储等领域。
  • ProtoBuf 类似于 XML,但是它更小、更快、更简单。ProtoBuf 提供了一种灵活且高效的自动化机制来序列化结构化数据。
  • 用户可以定义数据结构,然后使用特殊生成的源代码轻松地在各种数据流中使用多种语言编写和读取结构化数据。甚至可以在更新数据结构的同时,不破坏由旧数据结构编译的已部署程序。

简单来说,ProtoBuf(全称为 Protocol Buffer)是一种让结构化数据序列化的方法,具有以下特点:

    • 语言无关、平台无关支持 Java、C++、Python 等多种语言,并支持多个平台。
    • 高效相比 XML 更小、更快、更为简单。
    • 扩展性、兼容性好即使更新了数据结构,也不会影响或破坏已经存在的旧程序。

三、ProtoBuf 的使用特点

  1. 编写 .proto 文件:首先需要 编写 .proto 文件,用于定义结构化的对象(即 message)及其属性内容。
  2. 使用 protoc 编译器编译 .proto 文件:接下来,使用 protoc 编译器编译 .proto 文件,这会生成 一系列接口代码,并存储在新生成的头文件和源文件中。
  3. 依赖生成的接口:将编译生成的头文件包含进我们的代码中,以便实现对 .proto 文件中定义的字段进行设置和获取,以及对 message 对象进行序列化和反序列化。

使用特点:ProtoBuf 需要依赖通过编译生成的头文件和源文件来使用。

有了这种 代码生成机制,开发人员再也 不用吭哧吭哧地编写那些协议解析的代码了(干这种活是典型的吃力不讨好)


ProtoBuf 在不同操作系统下的安装

一、ProtoBuf 在 Windows 下的安装

1. 下载 ProtoBuf 编译器

  • 下载地址:github.com
  • 可以根据电脑情况选择是否下载最新版本。

  • 下载后,将压缩包解压到本地目录。解压后的文件夹内包含 bin、include 文件以及一个 readme.txt。

2. 配置环境变量

  • 将解压后文件夹中的 bin 目录添加到系统环境变量的 Path 中。

3. 检查是否配置成功

  • 打开 cmd,输入命令 protoc --version 查看版本信息。
  • 如果有显示版本号,说明安装成功。

也可以看这篇前文,借助 vcpkg 安装的 protobuf:

[ChatClient_1] 服务拆分 | 环境搭建 | model_1 | 命名


二、ProtoBuf 在 Linux 下的安装

1. 下载 ProtoBuf

  • 在下载 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

  • 下载地址:github.com
  • 根据需要选择对应的版本:
    • C++:cpp.zip
    • JAVA:java.zip
    • 支持全部语言:all.zip(例如选择 protobuf-all-21.11.zip)

  • 使用 wget 命令下载:wget https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-all-21.11.zip

  • 下载完成后,使用 unzip protobuf-all-21.11.zip 解压,并进入解压后的文件夹:cd protobuf-21.11


2. 安装 ProtoBuf

进入解压好的文件,执行以下命令:

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

第一步:因为上面我选择的是 all.zip,所以需要执行:./autogen.sh

第二步:选择统一安装(推荐):./configure --prefix=/usr/local/protobuf

再依次执行:

make // 执⾏15分钟左右
make check // 执⾏15分钟左右
sudo make install

第一步:make

第二步:make check

有的人可能会在 make check 出现错误

出现错误的原因是 test 的模块里面有非常多的测试用例,这些用例对服务器环境要求特别严格,需要增大下 swap 分区,具体操作可参考:

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

(建议可以先扩大 3G,再执行 make check。如果还是报错,再扩大到 5G 重新执行 make check,如果 swap 分区为 0,就直接跳过这一步 make check)

  • 执行 make check 后,出现以上内容就可以执行第三步:sudo make install

如果在执行 configure 时,当时选择了第一种执行方式,也就是:./configure,那么到这就可以正常使用 protobuf 了。

但如果是选择了跟我一样的第二种执行方式,即修改了安装目录:./configure --prefix=/usr/local/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/

先执行命令:sudo vim /etc/profile

最后一步,重新执行 /etc/profile 文件:

source /etc/profile

三、检查是否安装成功

  • 输入 protoc --version 查看版本信息

若有显示则说明安装成功啦~

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

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

相关文章

element ui的select选择框

我们首先先试一下&#xff0c;这个东西怎么玩的 <el-select v-model"select" change"changeSelect"><el-option value"香蕉"></el-option><el-option value"菠萝"></el-option><el-option value&quo…

51单片机学习之旅——定时器

打开软件 1与其它等于其它&#xff0c;0与其它等于0 1或其它等于1&#xff0c;0或其它等于其它 TMODTMOD&0xF0;//0xF01111 0000进行与操作&#xff0c;高四位保持&#xff0c;低四位清零&#xff0c;高四位定时器1&#xff0c;低四位定时器0 TMODTMOD|0x01;//0x010000 0…

【跟我学YOLO】(1)YOLO12:以注意力为中心的物体检测

欢迎关注『跟我学 YOLO』系列 【跟我学YOLO】&#xff08;1&#xff09;YOLO12&#xff1a;以注意力为中心的物体检测] 0. YOLOv12 简介0.1 YOLO12 论文下载0.2 YOLO12 的主要改进0.3 YOLO12 支持的任务和性能0.4 论文摘要 1. 背景介绍2. 相关的工作3. 方法3.1 效率分析3.2 区域…

基于Martin的全国基础底图实现

概述 前面有文章基于Martin实现MapboxGL自定义底图分享了Martin的使用&#xff0c;本文使用网络收集的数据实现了全国基础数据的收集和基础底图。 实现后效果 实现 1. 数据准备 实例中包含如下数据&#xff1a; 边界线和九段线数据省边界面数据省会城市点数据市边界面数据…

网页版的俄罗斯方块

1、新建一个txt文件 2、打开后将代码复制进去保存 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>俄…

HTML之JavaScript DOM简介

HTML之JavaScript DOM简介 DOM对象是一个树形对象 DOM树上的结点类型分类&#xff1a; 元素节点 element 标签属性节点 attribute 属性文本节点 text 双标签中间的文本 HTML代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UT…

【MATLAB例程】RSSI/PLE定位与卡尔曼滤波NLOS抑制算法,附完整代码

本 MATLAB 代码实现了基于接收信号强度指示(RSSI)和路径损耗模型(PLE)的定位算法,并结合卡尔曼滤波技术进行非视距(NLOS)干扰抑制。通过模拟真实运动轨迹,代码展示了如何在存在NLOS干扰的情况下进行有效的定位。订阅专栏后,可阅读完整代码,可直接运行 文章目录 运行结…

使用IDEA提交SpringBoot项目到Gitee上

登录Gitee并新建仓库 创建本地仓库 提交本地代码到本地仓库 提交本地代码到远程仓库

LLM Agent:PaSa

阅读原文 LLM Agent&#xff1a;PaSa 以 PaSa&#xff08;Paper Search&#xff09;为例&#xff0c;接下来将介绍由 LLM 驱动的先进的论文搜索智能体。PaSa 能够自主做出一系列决策&#xff0c;包括调用搜索工具、阅读论文以及选择相关参考文献&#xff0c;最终为复杂的学术…

Linux提权之脏牛Dirty COW CVE-2016-5195 (四)

CVE-2016-5195&#xff08;Dirty Cow脏牛&#xff09; 脏牛提权的利用方式不同于其他的内核溢出提权&#xff0c;这里单独记录 脏牛是一个非常经典的内核提权漏洞&#xff0c;存在Linux内核中已经有长达9年的时间&#xff0c;在2007年发布的Linux内核版本中就已经存在此漏洞&…

基于SpringBoot+vue+uniapp的智慧旅游小程序+LW示例参考

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

【微服务】深入解析spring aop原理

目录 一、前言 二、AOP 概述 2.1 什么是AOP 2.2 AOP中的一些概念 2.2.1 aop通知类型 2.3 AOP实现原理 2.3.1 aop中的代理实现 2.4 静态代理与动态代理 2.4.1 静态代理实现 三、 jdk动态代理与cglib代理 3.1 jdk动态代理 3.1.1 jdk动态代理模拟实现 3.2 CGLIB 代理…

vxe-table 如何实现跟 Excel 一样的数值或金额的负数自动显示红色字体

vxe-table 如何实现跟 Excel 一样的数值或金额的负数自动显示红色字体&#xff0c;当输入的值为负数时&#xff0c;会自动显示红色字体&#xff0c;对于数值或者金额输入时该功能就非常有用了。 查看官网&#xff1a;https://vxetable.cn gitbub&#xff1a;https://github.co…

C++:dfs,bfs各两则

1.木棒 167. 木棒 - AcWing题库 乔治拿来一组等长的木棒&#xff0c;将它们随机地砍断&#xff0c;使得每一节木棍的长度都不超过 5050 个长度单位。 然后他又想把这些木棍恢复到为裁截前的状态&#xff0c;但忘记了初始时有多少木棒以及木棒的初始长度。 请你设计一个程序…

MATLAB学习之旅:从入门到基础实践

在当今科技飞速发展的时代,MATLAB作为一款强大的数学软件,犹如一把神奇的钥匙,能够打开众多领域的大门。无论是工程计算、数据分析,还是算法开发、可视化呈现,MATLAB都展现出了无与伦比的魅力。今天,就让我们踏上这段奇妙的MATLAB学习之旅,从最基础的部分开始,逐步探索…

verilog笔记

Verilog学习笔记&#xff08;一&#xff09;入门和基础语法BY电棍233 由于某些不可抗拒的因素和各种的特殊原因&#xff0c;主要是因为我是微电子专业的&#xff0c;我需要去学习一门名为verilog的硬件解释语言&#xff0c;由于我是在某西部地区的神秘大学上学&#xff0c;这所…

基于SpringBoot的城乡商城协作系统【附源码】

基于SpringBoot的城乡商城协作系统 效果如下&#xff1a; 系统登陆页面 系统管理员主页面 商品信息管理页面 系统用户主页面 社区交流页面 用户充值页面 订单提交页面 商品信息页面 研究背景 随着互联网技术的飞速发展&#xff0c;电子商务在我国城乡地区的普及程度越来越高…

tortoiseSVN 如何克隆项目到本地

导入项目成功&#xff0c;如下图&#xff1a;

1.1 go环境搭建及基本使用

golang下载地址&#xff1a; Download and install - The Go Programming Language (google.cn) 验证安装是否成功&#xff1a; go version 查看go环境 go env 注意&#xff1a;Go1.11版本之后无需手动配置环境变量,使用go mod 管理项目&#xff0c;也不需要把项目放到GO…

使用Ubuntu搭建Java部署环境

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:小舟从此逝&#xff0c;江海寄余生&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小…