ProtoBuf介绍及安装

文章目录

    • 序列反序列化
    • 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.xdnf.cn/news/147630.html

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

相关文章

优化 IT 投资与资源管理,实现企业数字化转型的成功

为何优化 IT 投资与资源管理对数字化转型至关重要 在当今瞬息万变的商业环境中,数字化转型已成为企业保持竞争力的必要手段。然而,随着技术的不断进步,企业在推进数字化进程时面临着巨大的IT 投资和资源管理挑战。优化这些投资不仅能确保企业…

算法.图论-并查集

文章目录 1. 并查集介绍2. 并查集的实现2.1 实现逻辑2.2 isSameSet方法2.3 union方法(小挂大优化)2.4 find方法(路径压缩优化) 3. 并查集模板4. 并查集习题4.1 情侣牵手4.2 相似字符串组 1. 并查集介绍 定义: 并查集是一种树型的数据结构,用于处理一些不…

突破距离限制:大文件跨境传输的高效策略揭秘

目前越来越多的人认识到大数据的重要性,有人将大数据比作“石油”,未来的某一天石油资源可能会面临枯竭,但是大数据中蕴藏的资源却不会。海外市场对于数据驱动的产品和服务的需求不断增加,越来越多的企业寻求更深度的跨国业务及合…

国内人工智能AI头部公司32家(包括详细技术、特点和综合实力)

国内AI头部公司前100家及其详细技术、特点和综合实力,基于当前行业认知和市场表现选取的一些代表性企业。 1. 百度(Baidu) 技术:百度在人工智能AI领域拥有深厚的技术积累,包括自然语言处理、计算机视觉、深度学习等核…

【文心智能体】 旅游手绘手帐 开发分享 零代码 手绘风景 记录行程和心情 旅游攻略

旅游手绘手帐,点击文心智能体平台AgentBuilder | 想象即现实 (baidu.com) 背景 这个智能体是一个零代码智能体(文心智能体平台现主推零代码,低代码将于10月8日低代码下架迁移),同时它已公开配置详情,感兴趣…

使用centos7搭建wiki论坛,使用nginx网站来搭建wiki负载均衡,反向代理。

1.安装一个wget,进入目录opt下 #安装wget yum -y install wget#进入目录/opt/下面 cd /opt/2.获取 mysql8.0 rpm包,安装mysql8.0,安装mysql-server,yum会自动下载所需安装及依赖包. #获取 mysql8.0 rpm包 wget https://dev.mysql.com/get/mysql80-comm…

【文化课学习笔记】【物理】电场

【物理】电场 前置知识 绝缘体:本质是物体内部电荷无法自由移动。 导体:本质是物体内部电荷可以自由移动。 电荷的移动:导体内部能够发生自由移动的电荷只有负电荷。 显电性:显示的电性,是内部的正负电荷中和之后的结果…

NLP 文本分类任务核心梳理

解决思路 分解为多个独立二分类任务将多标签分类转化为多分类问题更换 loss 直接由模型进行多标签分类 数据稀疏问题 标注更多数据,核心解决方案: 自己构造训练样本 数据增强,如使用 chatGPT 来构造数据更换模型 减少数据需求增加规则弥补…

《2024中国AI大模型产业图谱2.0版》重磅发布

‍ 数据猿出品 本次“数据猿2024年度三大媒体策划活动——《2024中国AI大模型产业图谱3.0版》”正式发布。下一次版本迭代将于2024年12月底发布2024年3.0版,敬请期待,欢迎报名。 大数据产业创新服务媒体 ——聚焦数据 改变商业 随着科技的飞速发展&…

7.C++程序中的基本数据类型-数据类型之间的转换

在C中,类型转换是将一个数据类型转为另外一个数据类型,其转换过程比较复杂,目前只讨论基本数据类型之间的转换。 类型转换分为两部分:隐式转换和显示转换 隐式转换又称为自动转换,显示转换又称为强制转换。 隐式转换…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《基于台区剩余电流关联性分析的接线错误漏电用户识别方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

基于软件项目开发流程的软件综合实训室解决方案

一、引言 1.1 软件实训室的重要性 软件实训室作为高等教育和职业教育中的不可或缺组成部分,对于培养学生的实践能力和创新思维发挥着重要作用。随着信息技术的快速发展,软件行业对于高素质技术人才的需求日益增长。实训室提供了一个模拟真实工作环境的…

视频监控平台AS-V1000的目录管理和区域管理:实现现有监控视频资源的行政区域划分和管理

目录 一.行政区划相关概念 1.1 视频监控系统中的行政区划 1.2 国标GB28181中行政区划目录定义 二.视频资源管理平台介绍 2.1 AS-V1000视频平台介绍 2.2 平台相关服务的说明 三.区域管理功能介绍 3.1区域管理功能结构树 3.1.1区域管理…

面试经典算法题53-搜索插入位置

面试经典算法题53-搜索插入位置 公众号:阿Q技术站 LeetCode.35 问题描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为…

探索MemGPT:AI界的新宠儿

文章目录 探索MemGPT:AI界的新宠儿1. 背景介绍2. MemGPT是什么?3. 如何安装MemGPT?4. 简单的库函数使用方法5. 场景应用场景一:创建持久聊天机器人场景二:文档分析场景三:多会话聊天互动 6. 常见Bug及解决方…

Nginx笔记-使用alias映射磁盘目录(nginx文件下载)

Nginx 配置中,alias 关键字用于指定一个路径作为请求的别名。当客户端请求该别名路径下的资源时,Nginx会将其映射到实际的文件系统路径进行访问。这种方式可以用来隐藏实际文件系统路径,或者将客户端请求重新定向到另一个路径。 如下例子&am…

【幸运数 / A】

题目 代码 #include <bits/stdc.h> using namespace std; bool check(int num) {int cnt 0;int x num;while (x){cnt;x / 10;}if (cnt % 2)return false;cnt / 2;int sum 0, half 0, i 0;x num;while (x){i;if (i < cnt)half x % 10;sum x % 10;x / 10;}if (…

LeetCode 热题 100 回顾17

干货分享&#xff0c;感谢您的阅读&#xff01;原文见&#xff1a;LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 &#xff08;简单&#xff09; 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标…

vue3 + ts + pnpm:nprogress / 页面顶部进度条

一、简介 nprogress 是一个轻量级的进度条库&#xff0c;它适用于在网页上添加顶部进度条&#xff0c;用于指示页面加载进度或任何长时间的运行过程。这个库非常流行&#xff0c;因为它易于使用且视觉效果很好。 二、安装 pnpm add nprogress 三、在使用的页面引入 / src/v…

计算机毕业设计springboot+vue家居全屋家具定制系统

目录 功能和技术介绍系统实现截图开发核心技术介绍&#xff1a;使用说明开发步骤编译运行核心代码部分展示需求分析系统设计软件测试详细视频演示源码获取 功能和技术介绍 本项目包含程序源码和MySql脚本和文档,idea开发,支持Eclipse。使用vue的本质是SpringFramework【IoC&am…