protobuf安装和嵌套定义

背景

博主因为公司项目原因,客户端和服务端通信采用了protobuf协议,关于protobuf协议,不明白的自行百度,这个协议因其高效安全性,还是蛮常见的。
博主也是第一次安装使用,定义协议文件时发现不知道如何嵌套定义结构了,摸索。

安装

建议直接参考git上的README

  1. 下载https://github.com/google/protobuf,解压
  2. 需要以下依赖工具autoconf automake libtool curl make g++ unzip
  3. 进入根目录./autogen.sh
  4. 安装时出现
     If this token and others are legitimate, please use m4_pattern_allow.
     See the Autoconf documentation.
     autoreconf: /usr/bin/autoconf failed with exit status: 1

原来缺少一个工具libtool,安装:

sudo apt-get install libtool  

之后为了保证不出错 ,还需要安装一个工具libsysfs-dev

sudo apt-get install libsysfs-dev
  1. ./configure (更改安装路径的方式:–prefix=/usr/local/protobuf)

  2. make、make check、make install

  3. 配置

export LD_LIBRARY_PATH=/usr/local/lib  否则会出现找不到库文件

protobuf嵌套结构定义

示例协议文件:

demo.proto:
syntax = "proto3";
package demo;  
message Point {  
    float posX = 1;  
    float posY = 2;  
    float posZ = 3;  
} 

message Layer {
  bytes name = 1;
}

message Draw {
  repeated Layer layers = 1;
  Point centerpoint = 2;
}

protoc编译出c++的文件
使用时发现:
对于可重复的Layer可以使用add_layers()赋值,但是centrpoint却没有类似set或add的方式赋值。

打开demo.pb.h搜索一下,发现centrpoint只有两个疑似的函数set_allocated_centerpoint()和mutable_centerpoint(),后续查阅发现,这两个函数都能设置centpoint值

两种方式

  1. mutable_centerpoint():
demo::Point *p; 
demo::Draw draw;
p = draw.mutable_centerpoint(); //返回指针
p->set_posx(22);
printf("%f\n", draw.centerpoint().posx());
  1. set_allocated_centerpoint():
demo::Draw draw;
demo::Point *p = new gdpdraw::Point; 
p->set_posx(22);
draw.set_allocated_centerpoint(p);
printf("%f\n", draw.centerpoint().posx());

请关注我的订阅号

订阅号.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值