[转]google protobuf安装与使用

Protobuf快速入门 Prorobuf快速入门 阅读详情

google protobuf是一个灵活的、高效的用于序列化数据的协议。相比较XML和JSON格式,protobuf更小、更快、更便捷。google protobuf是跨语言的,并且自带了一个编译器(protoc),只需要用它进行编译,可以编译成Java、python、C++、C#、Go等代码,然后就可以直接使用,不需要再写其他代码,自带有解析的代码。更详细的介绍见: Protocol Buffers

protobuf安装

1、下载protobuf代码 google/protobuf

2、安装protobuf

  tar -xvf protobuf

  cd protobuf

  ./configure --prefix=/usr/local/protobuf

  make

  make check

  make install

至此安装完成^_^,下面是配置:

(1) vim /etc/profile,添加

  export PATH=$PATH:/usr/local/protobuf/bin/

  export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/

  保存执行,source /etc/profile。同时在~/.profile中添加上面两行代码,否则会出现登录用户找不到protoc命令。

(2) 配置动态链接库

  vim /etc/ld.so.conf,在文件中添加/usr/local/protobuf/lib(注意: 在新行处添加),然后执行命令: ldconfig

 .proto文件

  .proto文件是protobuf一个重要的文件,它定义了需要序列化数据的结构。使用protobuf的3个步骤是:

1 在.proto文件中定义消息格式

2 用protobuf编译器编译.proto文件

3 用C++/Java等对应的protobuf API来写或者读消息

程序示例(C++版)

  该程序示例的大致功能是,定义一个Persion结构体和存放Persion的AddressBook,然后一个写程序向一个文件写入该结构体信息,另一个程序从文件中读出该信息并打印到输出中。

1 addressbook.proto文件

复制代码

package tutorial;

message Persion {
    required string name = 1;
    required int32 age = 2;
}

message AddressBook {
    repeated Persion persion = 1;
}

复制代码

  编译.proto文件,执行命令: protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto,

示例中执行命令protoc --cpp_out=/tmp addressbook.proto ,会在/tmp中生成文件addressbook.pb.h和addressbook.pb.cc。

2 write.cpp文件,向文件中写入AddressBook信息,该文件是二进制的

复制代码

 1 #include <iostream>
 2 #include <fstream>
 3 #include <string>
 4 #include "addressbook.pb.h"
 5 
 6 using namespace std;
 7 
 8 void PromptForAddress(tutorial::Persion *persion) {
 9     cout << "Enter persion name:" << endl;
10     string name;
11     cin >> name;
12     persion->set_name(name);
13 
14     int age;
15     cin >> age;
16     persion->set_age(age);
17 }
18 
19 int main(int argc, char **argv) {
20     //GOOGLE_PROTOBUF_VERIFY_VERSION;
21 
22     if (argc != 2) {
23         cerr << "Usage: " << argv[0] << " ADDRESS_BOOL_FILE" << endl;
24         return -1;
25     }
26 
27     tutorial::AddressBook address_book;
28 
29     {
30         fstream input(argv[1], ios::in | ios::binary);
31         if (!input) {
32             cout << argv[1] << ": File not found. Creating a new file." << endl;
33         }
34         else if (!address_book.ParseFromIstream(&input)) {
35             cerr << "Filed to parse address book." << endl;
36             return -1;
37         }
38     }
39 
40     // Add an address
41     PromptForAddress(address_book.add_persion());
42 
43     {
44         fstream output(argv[1], ios::out | ios::trunc | ios::binary);
45         if (!address_book.SerializeToOstream(&output)) {
46             cerr << "Failed to write address book." << endl;
47             return -1;
48         }
49     }
50 
51     // Optional: Delete all global objects allocated by libprotobuf.
52     //google::protobuf::ShutdownProtobufLibrary();
53 
54     return 0;
55 }

复制代码

  编译write.cpp文件,g++ addressbook.pb.cc write.cpp -o write `pkg-config --cflags --libs protobuf` (注意,这里的`符号在键盘数字1键左边,也就是和~是同一个按键)。

3 read.cpp文件,从文件中读出AddressBook信息并打印

复制代码

 1 #include <iostream>
 2 #include <fstream>
 3 #include <string>
 4 #include "addressbook.pb.h"
 5 
 6 using namespace std;
 7 
 8 void ListPeople(const tutorial::AddressBook& address_book) {
 9     for (int i = 0; i < address_book.persion_size(); i++) {
10         const tutorial::Persion& persion = address_book.persion(i);
11 
12         cout << persion.name() << " " << persion.age() << endl;
13     }
14 }
15 
16 int main(int argc, char **argv) {
17     //GOOGLE_PROTOBUF_VERIFY_VERSION;
18 
19     if (argc != 2) {
20         cerr << "Usage: " << argv[0] << " ADDRESS_BOOL_FILE" << endl;
21         return -1;
22     }
23 
24     tutorial::AddressBook address_book;
25 
26     {
27         fstream input(argv[1], ios::in | ios::binary);
28         if (!address_book.ParseFromIstream(&input)) {
29             cerr << "Filed to parse address book." << endl;
30             return -1;
31         }
32         input.close();
33     }
34 
35     ListPeople(address_book);
36 
37     // Optional: Delete all global objects allocated by libprotobuf.
38     //google::protobuf::ShutdownProtobufLibrary();
39 
40     return 0;
41 }

复制代码

   编译read.cpp文件,g++ addressbook.pb.cc read.cpp -o read `pkg-config --cflags --libs protobuf`

4 执行程序

Apollo里常用的google protobuf简明教程 protobuf(Google Protocol Buffers)是Google提供一个具有高效的协议数据交换格式工具库(类似Json)。 在看百度Apollo自动驾驶开源代码时,经常会看到.proto文件,刚开始不了解是怎么用的,同时在看代码时经常会看到一些找不到定义的类,这个时候往往导致代码看不下去,在简单了解google protobuf 的使用后,问题都迎刃而解。 .proto里的message类数据结构是Apollo里各模块常用的一种数据结构。 后面将Apollo代码里的规划控制相关模块的算 阅读详情

相关推荐

unity 中使用Google Protobuf的使用

在proto3中支持所有的语言!注意:这里选择netstandard2.0中的dll文件是因为unity2019.4.x中 api版本对应的时.NET Standard 2.0,不同版本的unity要找不同的net版本对应,否则会有冲突,一般更高版本的unityapi版本为netstandard2.1。使用 Protobuf 无需学习复杂的文档对象模型,Protobuf 的编程模式比较友好,简单易学,同时它拥有良好的文档和示例,对于喜欢简单事物的人们而言,Protobuf 比其他的技术更加有吸引力。

weixin_43298513的博客 3529

Google 的 Protobuf, 快就完事啦

例如,可以通过将公共字段放在一个单独的消息中,然后将这个消息作为另一个消息的字段来实现类似于类继承的功能。总之,在 Spring Boot 中使用 Protobuf 作为 Redis 的序列化和反序列化工具可以提高应用程序的性能和可扩展性。然而,在实际应用中,您可以通过上述方式在 Protobuf 中表示嵌套类、集合以及类似于类继承和接口实现的概念。在 Spring Boot 中使用 Protobuf 作为 Redis 的序列化和反序列化工具,首先需要添加相关的依赖,然后配置 RedisTemplate。

洪晓鸿 3266

Google_Protobuf协议——Protobuf安装编译

文件版本说明 下载代码 linux下的编译安装 windows下的编译安装 Cmake编译 编译Release版本 编译Debug版本 Visual Studio 2017编译 编译Release版本 编译Debug版本 编译后的Protobuf工具 头文件包含 linux windows 库文件包含 Linux windows 版本编译文件版本说明 版本 颁布日期 修订章节 作者

zxng_work的博客 6902

Google Protocol Buffer

什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交

rongrong0206的专栏 1408

Google Protobuf的安装、配置、以及简单demo编译

【准备工作】 Google Protobuf安装包   https://code.google.com/p/protobuf/downloads/list 文档  https://developers.google.com/protocol-buffers/docs/overview?hl=zh-CN 项目首页 https://code.google.com/p/protobuf/

Allen的技术天空 1万+

如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信

如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信

愤怒的小狐狸----博客专栏 2万+

windows下go安装并使用protobuf

windows下golang安装并使用protobuf

Hide on bush 3986

protobuf的简介、安装与使用

Protobuf 是一种灵活、高效且可扩展的数据序列化工具,广泛应用于现代软件开发中,特别是在需要高性能和跨语言的场景下。其高效的存储和传输能力使得它在各种系统中得到了广泛的应用。二、安装下载指定版本的源码: 你可以从下载你需要的版本。解压并编译安装makesudo ldconfig # 更新库的链接验证安装版本三、使用以下是一个完整的 C++ 示例,展示如何使用 Protocol Buffers (Protobuf) 创建、序列化和反序列化消息。

Fan0920的专栏 1340

google protobuf安装与使用

  google protobuf是一个灵活的、高效的用于序列化数据的协议。相比较XML和JSON格式,protobuf更小、更快、更便捷。google protobuf是跨语言的,并且自带了一个编译器(protoc),只需要用它进行编译,可以编译成Java、python、C++、C#、Go等代码,然后就可以直接使用,不需要再写其他代码,自带有解析的代码。更详细的介绍见:Protocol Buffers protobuf安装 1、下载protobuf代码google/protobuf 2、安装pr..

jusu10的博客 6020

Google Protobuf 的使用

Google Protobuf的使用 Protobuf 数据序列化方式除了常见的JSON和XML之外,还有Google 的 ProtoBuf,它在效率、兼容性等方面非常的出色。 为什么选择Protobuf,可以看看官方文档给出的描述: protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。 Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快

ZJP的博客 870

Google_Protobuf协议——Protobuf工具使用

编写Protobuf文件 编译Protobuf文件 工程源码加入Protobuf Linux Windows Debug Release 头文件包含 命名空间工具安装好后,就需要编写protobuf文件,让protobuf工具编译成源码,然后将源码放入工程文件中使用。protobuf文件的后缀为.proto编写Protobuf文件测试文件test.proto//确定支持的protobuf语法 syn

zxng_work的博客 4805

Google Protocol Buffers(protobuf)安装与使用指南

Google Protocol Buffers(protobuf)安装与使用指南 【免费下载链接】protobuf 项目地址: https://gitcode.com/gh_mirrors/pro/protobuf ...

gitblog_00492的博客 1252

Linux下安装Google protobuf

因为工作原因转到深度学习方向,打算在Linux下运行tensorflow环境。安装完后import TensorFlow报错,没有安装protobuf。在网上找了好多教程也没解决问题,最后把我自己解决的方法给大家分享下。        建议大家上GitHub上去下Google的protobuf包,在linux下运行git clone命令下载。下载完成后可以看到有许多文件,我需要的是Python的

sevenrad的博客 1419

如何在Linux环境下在CodeBlock中安装使用Google Protobuf

如何在Linux环境下在CodeBlock中安装使用Google Protobuf

愤怒的小狐狸----博客专栏 4062

神经符号AI架构解析:如何通过V&V提升AI系统可信性

在人工智能领域,深度学习模型因其强大的模式识别能力而广泛应用,但其内部决策过程往往如同“黑盒”,难以追溯和解释,这给系统验证与确认带来了巨大挑战。验证与确认是确保复杂软件系统安全、可靠、符合预期的基石,其中验证关注“是否正确地构建了产品”,确认则关注“是否构建了正确的产品”。神经符号人工智能作为一种新兴范式,通过融合符号逻辑的透明推理与深度学习的强大感知,为解决这一难题提供了关键技术路径。它使得AI系统既能从数据中学习复杂模式,又能依据可形式化检验的规则进行逻辑推理,从而在自动驾驶、医疗诊断等高可靠性应用场

weixin_28681379的博客 360

基于YOLO+DeepSeek的农作物病虫害检测系统

本系统是一个基于YOLO+DeepSeek的农作物病虫害检测系统。 可使用YOLOV1-YOLOV12的任意模型进行目标检测。可以实现检测图片、批量检测图片、视频检测、摄像头检测四种方式。

qq_51977316的博客 1810

javascript前端如何使用google-protobuf

最近google的protobuf3出来了,抽空看了下,对JavaScript的支持也还是蛮不错的。pb在各行业都还是挺有用的,在数据存储和消息通讯上都是很不错的选择,不论是从效率和占用内存带宽大小上,都有很大的优势,至于什么优势那就不在这里介绍了,感兴趣的同学可以去自己查阅下资料,pb和jason还有各种数据的优缺点,此处不做评价。 那么回到标题,在google推出了3.40的protob

天空飘过六个字儿 3万+

通讯软件013——分分钟学会Kepware OPC AE Server仿真配置

本文介绍如何使用Kepware软件仿真OPC AE Server配置。

zhouwl72的博客 2231

php下安装与使用protobuf

前言 上一周由于一个需求,需要使用protobuf协议进行交互,但是网上关于php使用protobuf协议与服务端交互的资料十分少,以及难找,因此记录一下。 ProtoBuf (Google Protocol Buffer)是由google公司设计的、用于数据交换的序列结构化数据格式,具有跨平台、跨语言、可扩展等特性,类似于常用的XML及JSON,但它具有更小的传输体积、更高的编码、解码能力,...

panjican的博客 3281

Windows下MMdetection3D保姆级安装指南(含CUDA和PyTorch版本避坑)

本文提供Windows平台下MMdetection3D的完整安装指南,重点解决CUDA与PyTorch版本匹配问题。从环境准备到关键组件安装,详细介绍了CUDA Toolkit选择策略、PyTorch精准安装步骤,以及MM系列组件的安装顺序和常见错误解决方案,帮助用户顺利完成3D目标检测环境的配置。

weixin_42628941的博客 493

TYPE-C PD协议实战:如何用LDR6028芯片实现边充电边OTG(附完整电路设计)

本文详细解析了如何利用LDR6028芯片实现TYPE-C接口在PD协议下的边充电边OTG功能。通过剖析PD协议双角色协商的核心挑战,提供了完整的硬件电路设计要点,包括Type-C接口配置、电源路径管理及系统框架,并附有调试实战指南,助力开发者构建稳定可靠的一线多用解决方案。

c6d7e8f9g的博客 1131

unity使用Google Protobuf

看到网上说Google的这个序列化工具能自动生成脚本(java、c#、c++。。。。。。)感觉很厉害的样子,于是就学学怎么在unity里用,正好结合之前写的socket通信,做一个demo。我看网上protobuf的教程很乱啊,最开始想找一篇跟着做下来完事了,结果坑也是不少。。。。。。 1.打开vs新建一个c#控制台工程 2.管理解决方案的nuget包 3.搜索Google protobuf ...

带酒书生的博客 2063

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的体育赛事目标检测系统(Python+PySide6界面+训练代码)

本文详细介绍了一个基于YOLOv5/v6/v7/v8的体育赛事目标检测系统的设计与实现。系统采用先进的深度学习算法,结合PySide6图形界面,实现了对体育赛事中运动员、球类、裁判等多种目标的实时检测与跟踪。本文将全面阐述系统的架构设计、算法原理、训练流程、界面实现以及实际应用效果,并提供完整的代码实现。

YOLO 510

ProtoBuf安装和使用简介

在前一篇文章中,对ProtoBuf做了一个基本介绍,这篇文章主要介绍ProtoBuf的安装和使用。 ProtoBuf的安装 安装ProtoBuf前需要先安装ProtoBuf的编译器和运行时环境。 对于C++使用者:由于ProtoBuf是用C++写的,因此你可以获取ProtoBuf的源码自己编译,而对于其他语言来说可以直接使用ProtoBuf已经编译好的Release版本直接进行安装和使用,相

hailong0715的专栏 4万+

硅基半导体量子点:单电子自旋量子比特技术手册

现在我们已经了解了从硅片到容错计算的全部环节,让我们用一张总览图把碎片拼成完整拼图。fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;important;important;important;color:#000!important;important;important;important;important;color:#000!

VectorShift的博客 376

北斗导航 | 接收机自主完好性监测(RAIM)算法近三年研究现状总结(2022-2025)

近三年RAIM算法已从传统的单故障检测演进为多星座协同、智能融合的复杂系统,在航空、自动驾驶等安全关键领域实现规模化应用。未来需重点突破城市复杂环境适应性和标准化体系建设,推动技术从"可用"向"可信"跨越。

尘世冰封的专栏 440
下一篇: Protobuffer和json深度对比
zero_china
博客等级 码龄16年 10粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值