【ProtoBuf】新手必看:ProtoBuf入门与安装

举报
是店小二呀 发表于 2025/09/09 14:31:41 2025/09/09
【摘要】 一、初识 ProtoBuf1.1 序列化概念序列化和反序列化序列化:把对象转换为字节序列的过程称为对象的序列化。反序列化:把字节序列恢复为对象的过程称为对象的反序列化。什么情况下需要序列化存储数据:当你想把的内存中的对象状态保存到⼀个⽂件中或者存到数据库中时。⽹络传输:⽹络直接传输数据,但是⽆法直接传输对象,所以要在传输前序列化,传输完成后反序列化成对象。例如我们之前学习过socket编程中...

一、初识 ProtoBuf

1.1 序列化概念


序列化和反序列化

  • 序列化:把对象转换为字节序列的过程称为对象的序列化。

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

什么情况下需要序列化

  • 存储数据:当你想把的内存中的对象状态保存到⼀个⽂件中或者存到数据库中时。

  • ⽹络传输:⽹络直接传输数据,但是⽆法直接传输对象,所以要在传输前序列化,传输完成后反序列化成对象。例如我们之前学习过socket编程中发送与接收数据。

我们主要有xmljsonptotobuf三种方式实现序列化。

1.2 ProtoBuf是什么

  • ProtocolBuffers是Google的⼀种语⾔⽆关、平台⽆关、可扩展的序列化结构数据的⽅法,它可⽤于(数据)通信协议、数据存储等。

  • ProtocolBuffers类⽐于XML,是⼀种灵活,⾼效,⾃动化机制的结构数据序列化⽅法,但是⽐XML更⼩、更快、更为简单。

  • 你可以定义数据的结构,然后使⽤特殊⽣成的源代码轻松的在各种数据流中使⽤各种语⾔进⾏编写和读取结构数据。你甚⾄可以更新数据结构,⽽不破坏由旧数据结构编译的已部署程序。

简单来讲,ProtoBuf(全称为ProtocolBuffer)是让结构数据序列化的⽅法,其具有以下特点:

  • 语⾔⽆关、平台无关:即ProtoBuf⽀持Java、C++、Python等多种语⾔,⽀持多个平台。

  • ⾼效:即⽐XML更⼩、更快、更为简单。

  • 扩展性、兼容性好:你可以更新数据结构,⽽不影响和破坏原有的旧程序。

1.3 ProtoBuf的使用特点

ProtoBuf是需要依赖通过编译生成的头文件源文件来使用的。比如.proto文件通过编译生成.h和.cc文件,提供其他文件使用。

【使用ProtoBuf效果】


由于编写"处理字段的方法和处理类的方法"需要程序员实现,其中是比较耗时的"。如果我们采用ProtoBuf方法,将这部分工作交过 PB 编译器帮我们完成,生成一些的方式,我们直接使用即可。

  1. 编写 .proto ⽂件,⽬的是为了定义结构对象(message)及属性内容。

  2. 使⽤ protoc 编译器编译 .proto ⽂件,⽣成⼀系列接⼝代码,存放在新⽣成头⽂件和源⽂件中。

  3. 依赖⽣成的接⼝,将编译⽣成的头⽂件包含进我们的代码中,实现对 .proto ⽂件中定义的字段进⾏设置和获取,和对 message 对象进⾏序列化和反序列化。

总的来说:ProtoBuf 是需要依赖通过编译⽣成的头⽂件和源⽂件来使⽤的。有了这种代码⽣成机制,开发⼈员再也不⽤吭哧吭哧地编写那些协议解析的代码了(⼲这种活是典型的吃⼒不讨好)。

二、安装 ProtoBuf

2.1 下载ProtoBuf 编译器

先麻烦直接滑到"正式下载"这一步

其中all表示支持所有语言,当然可以根据自己的语言需求,选择不同的版本。

下载缓慢问题:1.开魔法 2.开热点 3.关杀毒

官方下载地址https://github.com/protocolbuffers/protobuf/releases

推荐大家可以跟我统一下载 v22.11-all版本。链接如下:https://github.com/protocolbuffers/protobuf/releases/tag/v21.11

右键将这个链接复制下来,这里直接提供,减少大家的时间。

下载protobuf链接:https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-all-21.11.zip

正式下载】:

下载命令

wget https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-all-21.11.zip


下载完成后,解压zip包:

unzip protobuf-all-21.11.zip

image-20250831141805931

解压完成后,会生成"protobuf-21.11"文件,进入文件:

cd protobuf-21.11

image-20250831142100528

2.2 安装 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

如果选择了第⼆种执⾏⽅式,即修改了安装⽬录,那么还需要在/etc/profile 中添加⼀些内容

sudo vim /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/


出现make check错误(选看) 


出现以上错误的原因是test的模块⾥⾯有⾮常多的测试⽤例,这些⽤例对服务器环境要求特别严格,需要增⼤下swap分区,具体操作可参考: https://blog.csdn.net/AlexWang30/article/details/90341172

(建议可以先扩⼤3G,再执⾏ make check 。如果还是报错,再扩⼤到5G重新执⾏ make check

执⾏ make check 后 ,出现以下内容就可以执⾏ sudo make install


最后一招】:

protobuf-test需要的资源比较多,当前服务器配置较低,资源不够,从而导致出错的。可以忽略继续向后学习。

2.3 检查是否安装成功

需要先[source /etc/profile]更下配置文件资源。

输入protoc --version查看版本,有显示说明安装成功


感谢你的观看,让我们一同成长。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。