Protobuf 使用(c++)

2023-10-30

一、Protobuf 安装

  1. 安装protobuf

     tar -xvf protobuf

     cd protobuf

     ./autogen.sh生成configure

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

      make

     make check

     make install

  1. 安装完成,下面配置:
  1. vi /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

 

二、Protobuf 使用(c++)

  1. proto结构格式a.proto

         message PermitGwPolicys{

         repeated PermitGwPolicy permitGwPolicy = 1; //策略

         repeated PermitGwWhiteInfo permitGwWhiteInfo = 2;//白名单

         }

 

        message PermitGwPolicy{

        optional string permitGwPolicyId=1; //准入策略ID

        optional string applySystemIp=2; //应用系统地址

        optional string applySystemPort=3; //应用系统端口

        optional string responseAction=4; //响应动作

 

         repeated ExtendField extendFieldList = 5; //扩展字段

 

        }

 

        message PermitGwWhiteInfo{

        optional string startIp=1; //起始IP

        optional string endIp=2; //结束IP

        optional string permitGwPolicyId=3; //策略ID

 

         repeated ExtendField extendFieldList = 4; //扩展字段

        }

  1. 编译成a.pb.h  a.pb.cc

       protoc --cpp_out=./ a.proto  在当前目录下生成a.pb.h a.pb.c

 

  1. 使用

#include <iostream>

#include <stdio.h>

#include <fstream>

#include <string>

#include "permitGwPolicyInfo.pb.h"

using namespace std;

//读取

int main()

{

fstream input("a.proto",ios::in | ios::binary);

PermitGwPolicys a1;

a1.ParseFromIstream(&input);

 

cout<<"=====permitgwpolicy====="<<a1.permitgwpolicy_size()<<endl;

for(int i=0;i < a1.permitgwpolicy_size();i++)

{

cout<<a1.permitgwpolicy(i).permitgwpolicyid()<<endl;

cout<<a1.permitgwpolicy(i).applysystemip()<<endl;

cout<<a1.permitgwpolicy(i).applysystemport()<<endl;

}

 

cout<<"=====permitgwwhiteInfo====="<<a1.permitgwwhiteinfo_size()<<endl;

for(int j = 0;j <a1.permitgwwhiteinfo_size();j++)

{

cout<<a1.permitgwwhiteinfo(j).startip()<<endl;

cout<<a1.permitgwwhiteinfo(j).endip()<<endl;

cout<<a1.permitgwwhiteinfo(j).permitgwpolicyid()<<endl;

}

return 0;

}

g++ -I /usr/local/protobuf/include/ a.pb.cc *.cpp `pkg-config --cflags --libs protobuf`

/usr/local/protobuf/ protobuf安装目录

` 键盘左上角,1的旁边 ~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Protobuf 使用(c++) 的相关文章

随机推荐

  • 单相锁相放大器,双相锁相放大器(AD630详解)

    电路图是经过资料搜集验证并优化之后 实测好用 B站对应讲解视频链接 如何测量被噪声埋没了的信号 在测量各种物理量 温度 加速度等 时 用传感器将其变换成为电信号 然后输入到分析仪器 测量仪器 中去 但是 仅想获得必要的信号是很难做到的 通常
  • 【沧海拾昧】C# .Net SplitContainer(分割器)控件的使用笔记

    C0202 沧海茫茫千钟粟 且拾吾昧一微尘 沧海拾昧集 CuPhoenix 阅前敬告 沧海拾昧集仅做个人学习笔记之用 所述内容不专业不严谨不成体系 如有问题必是本集记录有谬 切勿深究 目录 一 将窗口绑定到SplitContainer中作为
  • Mybatis-plus常用方法

    Mybatis plus常用方法总结 便携查看 1 单表增删改查 class GgktDemoApplicationTests 注入mapper Autowired private UserMapper userMapper 1 查询 Te
  • JavaScript 实现全选、全不选和反选功能

    网页中使用到表单复选框时 如果有大量的数据需要选择 经常会用到全选或者反选功能 也可能会用到全不选功能 其实是全选的反选 下面使用原生的js来实现一下全选 全不选和反选功能 声明 文章转载链接出自 JavaScript 实现全选 全不选和反
  • 《Leaflet 基础知识点》- 绘制圆、线、矩形和多边形

    前言 注意绘制的都是矢量图层 所以在 Vector Layers 分类下 绘制 圆 官网API 示例 圆 半径 radius 的单位为米 var circle L circle 31 537628173828125 121 19018554
  • 给label绘制下划线

    UIlabel本身没有下划线的属性 使用绘制的方法 添加下滑下 并且赋给该label一个action作为响应方法 实现DIY超链接的效果 调用 import UnderLineLabel h UnderLineLabel label Und
  • naive 路由使用 loadingBar 进度条

    环境 devDependencies vitejs plugin vue 4 2 3 axios 1 4 0 less 4 1 3 less loader 11 1 3 naive ui 2 34 4 pinia 2 1 4 typescr
  • PostMan使用技巧:“status“: 415 解决方案

    前言 该错误的出现 主要原因是Postmanf操作不当所致 下面代码为调用方法入口 一 错误提示信息 二 处理方案 如下图所示 调整传参方式为Body gt raw gt JSON application json 尾言 错误不大 侮辱性极
  • usb:认识usb传输(一)

    文章目录 一 usb发展背景 1 usb特点 2 usb发展 1 更名 2 发展 3 传输速度 4 usb编 解码方式 反向不归零 NRZI 位填充 5 信号传输状态 5 帧 6 通讯过程划分 二 usb的四种传输 1 控制传输 2 中断传
  • UE4鼠标滚轮控制镜头缩放

    蓝图 因为其实实现起来比较简单 所以直接上蓝图 主要是用到了UE4的鼠标滚轮操作映射 每当滑动鼠标滚轮的时候就会传出一个数值 有正有负有0 然后将角色的相机摇臂组件拖进蓝图 获取其中的Target Arm Length变量加上一个数值再重新
  • postman实战:2.参数化csv和json

    在上节课讲解了使用postman做接口测试时 如何设置环境变量和全局变量关联参数 关联环境变量和全局变量中参数时 他们的作用范围再来回顾一下 下面来看一下postman里面关于参数化的应用 首先分析下应用场景 1 某一个接口我们对入参设计了
  • 十二、支持向量机

    def svmm 支持向量机 完善 用超平面对高纬空间中的样本进行分类 为了解决线性不可分问题 引入了核函数 常用核函数有线性核函数 多项式核函数 高斯核函数和sigmoid核函数 API sklearn svm SVC C 1 0 ker
  • 机器学习综述论文笔记:Machine Learning: A Review of Learning Types

    机器学习review Paper Machine Learning A Review of Learning Types 这是一篇关于机器学习的综述 里面简述了各种现有的机器学习技术 1 主要的方法 监督 无监督 强化 1 1 监督学习 数
  • Redis原理篇(二)网络模型

    一 用户空间和内核空间 应用需要通过Linux内核与硬件交互 内核本质也是应用 运行的时候也需要CPU资源 内存资源 用户应用也在消耗这些资源 为了避免用户应用导致冲突甚至内核崩溃 用户应用与内核是分离的 进程的寻址空间会划分为两部分 内核
  • 公司前端vue是用vscode开发工具写的,个人喜欢用idea,但是idea在保存代码的时候会自动去除代码行最后的空格,造成不该修改的地方修改了,影响代码提交

    取消这个功能 File Settings Editor General On Save Remave trailing
  • springBoot 观察者模式

    观察者设计模式 jie神说用订阅和发布来理解更好 我想了一下是的 为什么呢 因为监听器这个名词听起来是一个主动的 可实际监听器是一个被动的玩意 比如我们事件源发布一个事件 然后监听器订阅了这个事件就能做出动作 里面涉及到三个对象 事件源 事
  • 【2023】JAVA和PLC实现通讯读取写入数据,以三菱PLC举例

    1 创建maven工程引入依赖
  • --- Error: User Command terminated, Exit-Code = 1解决办法

    使用keil MDK编译项目时 compiling编译通过 但是文件最后出现错误 Error User Command terminated Exit Code 1 经查阅资料 MDK需要fromelf exe文件生成 bin 那么在重新安
  • uboot编译报错解决

    uboot编译报错 root ubuntu home gjt uboot u boot 2015 01 make scripts kconfig conf silentoldconfig Kconfig scripts kconfig co
  • Protobuf 使用(c++)

    一 Protobuf 安装 安装protobuf tar xvf protobuf cd protobuf autogen sh生成configure configure prefix usr local protobuf make mak