W...Y的主页 😊
代码仓库分享 💕
目录
序列化概念
ProtoBuf是什么
ProtoBuf在window下的安装
下载ProtoBuf编译器
配置环境变量
编辑 检查是否配置成功
编辑 ProtoBuf在Linux下的安装
下载ProtoBuf
安装ProtoBuf
序列化概念
首先我们先聊一下什么是序列化反序列化,相信在Linux网络编程中我们提到过http在接收或发送时都要先制定一个协议,这个协议是一个类或结构体,而我们将一个对象通过网络传输转成字节序的过程叫做序列化,反之则为反序列化。
什么情况下需要序列化与反序列化呢?
存储数据:当你想把的内存中的对象状态保存到⼀个⽂件中或者存到数据库中时。
⽹络传输:⽹络直接传输数据,但是⽆法直接传输对象,所以要在传输前序列化,传输完成后反
序列化成对象。例如我们之前学习过?socket?编程中发送与接收数据。
而在Linux网络编程中,我们使用了json库对我们收到或发送的请求应答进行序列化或反序列化。但是在序列化时不仅仅只有json可以进行操作,还有xml、protobuf。
ProtoBuf是什么
Protocol?Buffers?是?Google?的⼀种语⾔⽆关、平台⽆关、可扩展的序列化结构数据的⽅法,它可⽤于(数据)通信协议、数据存储等。
Protocol Buffers类⽐于XML,是⼀种灵活,⾼效,⾃动化机制的结构数据序列化⽅法,但是比XML更⼩、更快、更为简单。
你可以定义数据的结构,然后使⽤特殊⽣成的源代码轻松的在各种数据流中使⽤各种语⾔进⾏编写和读取结构数据。你甚⾄可以更新数据结构,⽽不破坏由旧数据结构编译的已部署程序。
用通俗的话来说:是一种与能让结构数据进行序列化的一种方法。
protobuf本身具有的特点:
语⾔⽆关、平台⽆关:即?ProtoBuf?⽀持?Java、C++、Python?等多种语⾔,⽀持多个平台。?
⾼效:即⽐?XML?更⼩、更快、更为简单。
扩展性、兼容性好:你可以更新数据结构,⽽不影响和破坏原有的旧程序。
protobuf的使用特点:
1. 编写.proto⽂件,⽬的是为了定义结构对象(message)及属性内容。
2. 使⽤protoc编译器编译.proto⽂件,⽣成⼀系列接⼝代码,存放在新⽣成头⽂件和源⽂件中。
3. 依赖⽣成的接⼝,将编译⽣成的头⽂件包含进我们的代码中,实现对.proto⽂件中定义的字段进⾏设置和获取,和对message对象进⾏序列化和反序列化。
一个协议就是一个结构体,而对这个结构体如果我们不仅要定义一些属性字段,还需要有获取其属性的方法以及序列化反序列化的方法。非常麻烦,而protoc编译器支持我们只需要写入属性字段后进行编译就可以实现这个结构体的众多方法。
ProtoBuf是需要依赖通过编译⽣成的头⽂件和源⽂件来使⽤的。有了这种代码⽣成机制,开发⼈员再也不⽤吭哧吭哧地编写那些协议解析的代码了(⼲这种活是典型的吃力不讨好)。
ProtoBuf在window下的安装
下载ProtoBuf编译器
下载地址:https://github.com/protocolbuffers/protobuf/releases
可以不⽤下载最新版本,课件以v21.11为例,具体的下载根据⾃⼰电脑情况选择。 下载之后将压缩包解压到本地⽬录下。解压后的⽂件内包含bin、include⽂件,以及⼀个readme.txt。
配置环境变量
把解压后⽂件中的bin⽬录配置到系统环境变量的Path中去
检查是否配置成功
打开cmd,输⼊:protoc--version 查看版本,有显⽰说明成功
ProtoBuf在Linux下的安装
下载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
ProtoBuf下载地址:Releases · protocolbuffers/protobuf · GitHub
可以不⽤下载最新版本,具体的下载根据⾃⼰电脑情况选择。
如果要在C++下使⽤ProtoBuf,可以选择cpp.zip;
如果要在JAVA下使⽤ProtoBuf,可以选择java.zip;
其他语⾔选择对应的链接即可。
希望⽀持全部语⾔,选择all.zip。
Linux下载命令:wget https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-all-21.11.zip
在这里我们选择所以语言的protobuf-all-21.11.zip进行下载。
下载完成后,解压zip包:unzip protobuf-all-21.11.zip
解压完成后,会⽣成 protobuf-21.11 ⽂件,进⼊⽂件:cd protobuf-21.11
安装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
(建议可以先扩⼤3G,再执⾏ make check 。如果还是报错,再扩⼤到5G重新执⾏ make
check )
执⾏ make check 后,出现以下内容就可以执⾏ sudo make install 。
到此,需要你回忆⼀下在执⾏configure时,如果当时选择了第⼀种执⾏⽅式,也就是./configure ,那么到这就可以正常使⽤protobuf了。如果选择了第⼆种执⾏⽅式,即修改了安装⽬录,那么还需要在/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/
输⼊ protoc --version 查看版本,有显⽰说明安装成功。
hyb@139-159-150-152:~/install/protobuf-21.11$ protoc --version
libprotoc 3.21.11
⾛到这⾥,恭喜你ProtoBuf安装成功!