【protobuf入门学习(一)】 —— protobuf安装教程

news2024/12/23 18:08:31

目录

(一)protobuf 的基本介绍

1. 序列化概念

 2. ProtoBuf 是什么

 3. ProtoBuf 的使用特点

(二)protobuf 安装

2.1 protobuf ——Windows

        1. 下载ProtoBuf编译器

2. 配置环境变量

 3. 检查是否配置成功 

2.2 protobuf —— Linux

1、下载ProtoBuf

2、安装ProtoBuf 

3、检查是否安装成功


(一)protobuf 的基本介绍

1. 序列化概念

序列化和反序列化

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

什么情况下需要序列化

  • 存储数据:当你想把的内存中的对象状态保存到⼀个⽂件中或者存到数据库中时。
  • ⽹络传输:⽹络直接传输数据,但是⽆法直接传输对象,所以要在传输前序列化,传输完成后反 序列化成对象。例如我们之前学习过socket编程中发送与接收数据。

如何实现序列化  

  • xml 、json、protobuf 

2. ProtoBuf 是什么

protobuf  是由 Google 开发的一种语言无关、平台无关的可扩展机制,用于序列化结构化数据,类似于 XML 或 JSON,但更小、更快、更简单。Protobuf 通过定义数据结的 .proto 文件来描述数据的格式,然后使用 Protobuf 编译器(protoc)生成特定语言的数据访问类。

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

  • 高效性:生成的代码在序列化和反序列化数据时比 XML 和 JSON 更快,占用空间更小。
  • 跨语言支持:支持多种编程语言,如 C++, Java, Python 等。
  • 扩展性:可以在不破坏现有代码的情况下添加新的字段。
  • 二进制格式:数据以二进制形式存储,这使得它比文本格式(如 XML 和 JSON)更紧凑,但可读性较差。

3. ProtoBuf 的使用特点

  • 1. 编写.proto⽂件,⽬的是为了定义结构对象(message)及属性内容。
  • 2. 使⽤protoc编译器编译.proto⽂件,⽣成⼀系列接⼝代码,存放在新⽣成头⽂件和源⽂件中。
  • 3. 依赖⽣成的接⼝,将编译⽣成的头⽂件包含进我们的代码中,实现对.proto⽂件中定义的字段进⾏ 设置和获取,和对message对象进⾏序列化和反序列化。 

(二)protobuf 安装

2.1 protobuf ——Windows

1. 下载ProtoBuf编译器

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

可以不⽤下载最新版本,我以v27.2为例,具体的下载根据自己电脑情况选择

下载之后将压缩包解压到本地⽬录下。解压后的⽂件内包含bin、include⽂件,以及⼀个readme.txt.


 2. 配置环境变量

把解压后⽂件中的bin⽬录配置到系统环境变量的Path中去


3. 检查是否配置成功 

打开cmd

  • 输⼊: protoc--version

查看版本,有显示说明成功

到这一步,恭喜你ProtoBuf安装成功!!! 


2.2 protobuf —— Linux

1、下载ProtoBuf

下载ProtoBuf前⼀定要安装依赖库:autoconfautomakelibtoolcurlmakeg++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

可以不⽤下载最新版本,这里我换一个以v21.11为例:

  • 如果要在C++下使⽤ProtoBuf,可以选择cpp.zip
  • 如果要在JAVA下使⽤ProtoBuf,可以选择java.zip
  • 其他语⾔选择对应的链接即可。 
  • 希望⽀持全部语⾔,选择all.zip

在这⾥我们希望⽀持全部语⾔,所以选择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

解压完成后,会⽣成 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

再依次执行

make        // 执⾏ 15 分钟左右

make check // 执⾏ 15 分钟左右

sudo make install 

执⾏ 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/

最后⼀步,重新执⾏/etc/profile⽂件:

source /etc/profile


 3、检查是否安装成功

输⼊ protoc --version 查看版本,有显⽰说明安装成功。

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

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

相关文章

【数字时序】时钟树延迟偏差——CPPR adjustment

接上一篇文章Innovus的时序报告解读,新版的貌似多了一些信息,比如CPPR Adjustment和Derate。不太清楚这两个是什么概念,搜索之后转载2篇后端工程师的博客如下: 搜到个这个网站好像有很多后端相关的知识点分享一哈: Co…

Linux文件编程(进阶)

文章目录 Linux文件编程文件操作的基本元素(文件在磁盘上的操作)软链接和硬链接原理文件系统范围创建方式示例:在终端使用指令创建软硬链接软链接硬链接 删除源文件影响软链接和硬链接实现的具体原理link函数unlink函数代码示例:使…

【链栈的实现】--------本质为不带头结点的 头插法建立起来的单链表

1.链栈的基本属性与特征: 链栈是运算受限的单链表,只能在链表头部进行操作 2.链栈的相关基础操作汇总 初始化操作:操作结果:构造一个空栈 S。 InitStack(LinkStack *s)判定S是否为空栈: 初始条件:栈S 已存在 操作结果:若栈S为…

【Linux】全面解析进程:优先级、环境变量与地址空间

文章目录 1. 进程概念1.1 什么叫做进程?1.2 进程和程序的区别 2. linux下的进程2.1 task_struct 包含哪些内容2.2 访问(查看)进程信息2.3 通过系统调用获取进程标示符2.4 通过系统调用创建进程2.5 进程状态2.6 如何查看进程状态(指…

鸿蒙开发5.0【基于CameraKit,通过avrecorder进行录像】

1 场景描述 录像是相机应用的最重要功能之一,录像是循环帧的捕获。本文通过CameraKit自定义相机并通过avrecorder进行录像。 2 效果图 3 自定义相机录像流程图 4 方案描述 4.1 整体描述: 总体可分为:1、相机输入,2、同时输出预览流录像流…

【Python机器学习】NLP分词——利用分词器构建词汇表(三)——度量词袋之间的重合度

如果能够度量两个向量词袋之间的重合度,就可以很好地估计他们所用词的相似程度,而这也是它们语义上重合度的一个很好的估计。因此,下面用点积来估计一些新句子和原始的Jefferson句子之间的词袋向量重合度: import pandas as pdse…

win10配置安装apache服务

Welcome! - The Apache HTTP Server Project

redisson watchdog 原理

目录 1、使用2、加锁解析1、getLock2、tryLock2.1、当ttl为null时为加锁成功,返回true,否则继续往下执行,判断是否超过等待时间,当前时间减去获取锁前时间就是获取锁花费时间。2.2、tryAcquire(leaseTime, unit, threadId)2.3 、renewExpirat…

黑悟空!一区预定!原创首发!SLWCHOA-Transformer-LSTM混合改进策略的黑猩猩优化算法多变量时间序列预测

黑悟空!一区预定!原创首发!SLWCHOA-Transformer-LSTM混合改进策略的黑猩猩优化算法多变量时间序列预测 目录 黑悟空!一区预定!原创首发!SLWCHOA-Transformer-LSTM混合改进策略的黑猩猩优化算法多变量时间序…

帮助检测SQL注入漏洞的工具

目录 SQLMap与Burp Suite相比,哪个更适合进行大规模的SQL注入检测? OWASP ZAP在检测SQL注入时的优势体现在哪些方面? 对于SQL注入漏洞检测,Havij和acunetix有什么区别? 在检测SQL注入漏洞方面,有几款工具…

shell脚本-采集容器内自定义端口tcp连接数并通过http接口推送到Prometheus

目录 1、脚本编写 2、脚本说明 3、运行脚本 1、脚本编写 脚本监控服务器 5000 端口的 TCP 连接数。使用 netstat 工具获取连接数,并通过一个简单的 shell 服务器提供 /connect 接口。具体功能如下: vim prometheus_tcp_monitor.sh 编写脚本&#…

Docker 安装消息队列RabbitMQ

拉取镜像 docker pull rabbitmq拉取最新镜像 创建并运行 docker run -d --hostname my-rabbit --name rabbit-p 15672:15672 -p 5673:5672rabbitmq开启Web管理 进入容器 docker exec -it rabbitmq /bin/bash开启web管理 rabbitmq-plugins enable rabbitmq_managementhttp:…

一文通透DeepSeek-V2(改造Transformer的中文模型):从DeepSeek LLM到DeepSeek-V2的MLA与MoE

前言 成就本文有以下三个因素 24年5.17日,我在我司一课程「大模型与多模态论文100篇」里问道:大家希望我们还讲哪些论文 一学员朋友小栗说:幻方发布的deepseek-v224年5.24日,我司一课程「大模型项目开发线上营1」里的一学员朋友…

Typora + PicGo + SMMS 实现markdown格式文档图片上传

Typora PicGo SMMS 实现图片自动上传 1. Typora 软件安装2. PicGo 的安装2.1 下载 PicGo 3. 配置 SMMS 图床服务3.1 注册并登录 SMMS3.2 获取 API Token 4. 软件配置4.1 Typora 图床设置4.2 PicGo 配置 5. 使用 Typora 实现图片自动上传 1. Typora 软件安装 Typora中文版是一…

排序1

一、概述 直接插入排序 是稳定排序 二、插入排序 1)直接插入排序 2)折半插入排序 3)希尔排序 、 三、交换排序 1)冒泡排序 2)快速排序

three.js 着色器学习 聚集地

预览地址:https://z2586300277.github.io/three-cesium-examples 国内站点预览:http://threehub.cn github: https://github.com/z2586300277/three-cesium-examples

swift微调Qwen-7B大模型

环境说明: CUDA相关环境已搭建完成,不会装CUDA环境可参照我的其它文章; 显卡:4张3090 1、安装swift环境 #从源码安装 git clone https://github.com/modelscope/swift.git cd swift pip install -e .[llm] pip install -e .[e…

文件读写与缓存机制

文件读写与缓存机制 写文件: 1:stdio函数库 fopen/fwrite/fflush/fclose File* fp2: POSIX系统级别函数 open/write/close fd3:Windows系统级别函数 CreateFile/WriteFile/CloseHandle**同步数据到磁盘:**FlushFileBuffers、f…

永磁同步电机高性能控制算法(13)后续篇—— 基于高阶扩张状态观测器(ESO)的无模型预测控制(MFPC)

1.前言 前文已经介绍过了高阶ESO相对于传统ESO的优势。 https://zhuanlan.zhihu.com/p/703039702https://zhuanlan.zhihu.com/p/703039702 但是当时搭的ESO有点问题。把公式修正之后,发现前文用的改进四阶ESO无法使用。 今天来解释一下为什么改进4阶ESO无法使用…

SystemTap(stap)架构和原理介绍,以及脚本编写举例

1 SystemTap简介 SystemTap是一个诊断Linux系统性能或功能问题的开源工具。它允许开发人员和系统管理员深入研究内核甚至用户空间应用程序的行为,以便发现错误状态、性能问题,或者仅仅为了解系统是如何工作的。它使得对运行时的Linux系统进行诊断调式变…