Protobuf 安装与使用

Protobuf 安装与使用

  • 1 环境
  • 2 安装 [apt安装]
  • 2 安装 [源码安装]
    • 1 依赖
    • 2 下载 protobuf
    • 3 解压
    • 4 编译安装
    • 5 配置环境
  • 2 命令
    • 查看版本
    • 卸载
  • 3 使用
    • 书写 .proto 文件
    • 编译 .proto 文件生成 cpp 文件
    • 编写 cpp 文件
    • 编译
    • 运行
  • 参考

在这里插入图片描述

1 环境

ubuntn 20.04
protobuf v3.6.1

2 安装 [apt安装]

2 安装 [源码安装]

1 依赖

需要git、g++、cmake 等

sudo apt-get update  
sudo apt-get install autoconf automake libtool

2 下载 protobuf

选择版本 v3.6.1
网址:https://github.com/protocolbuffers/protobuf/releases/tag/v3.6.1
选择:protobuf-all-3.6.1.tar.gz

3 解压

拷贝到自己目录下解压

sudo tar -zxvf protobuf-all-3.6.1.tar.gz

4 编译安装

cd protobuf-3.6.1
sudo ./autogen.sh
#./configure --prefix=$INSTALL_DIR  #--prefix指定安装目录 默认 /usr/local
sudo ./configure --prefix=/opt/protobuf
sudo make
sudo make check
sudo make install

5 配置环境

  • 添加环境变量
vim /etc/profile
# 末尾加上如下两行
export PATH=$PATH:/opt/protobuf/bin/
export PKG_CONFIG_PATH=/opt/protobuf/lib/pkgconfig/
# 命令使生效
source /etc/profile
  • 配置动态链接库【可不配置,编译时链接就行】
vim /etc/ld.so.conf# 加入
/opt/protobuf/lib# 动态库加载
sudo ldconfig

2 命令

查看版本

protoc --versioneg:libprotoc 3.6.1

卸载

sudo apt-get remove libprotobuf-dev

3 使用

书写 .proto 文件

如下命名规则方便理解
packageName.MessageName.proto

bp.test.proto

syntax = "proto3";package BP;message Test {int32 id = 1;		// IDstring name = 2;	// name
}message TestList {int32 id = 1;repeated Test tl = 2;
}

编译 .proto 文件生成 cpp 文件

写好 proto 文件之后就可以用 Protobuf 编译器将该文件编译成目标语言了。

protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/XXX.protoeg:
protoc --cpp_out=./ bp.test.proto

生成两个文件【数据操作,序列化反序列化】
bp.test.pb.h ,定义了 C++ 类的头文件
bp.test.pb.cc ,C++ 类的实现文件

编写 cpp 文件

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include "./bp.test.pb.h"  int main() {  BP::Test t;  t.set_id(1);  t.set_name("sen");  printf("%d - %s\n", t.id(), t.name().c_str());  BP::Test t2 = t;  // 复制t到t2  t2.set_id(2);  printf("%d - %s\n", t2.id(), t2.name().c_str());BP::Test t3;  t3.set_id(3);  t3.set_name("sen3");  printf("%d - %s\n", t3.id(), t3.name().c_str());BP::TestList list;  list.set_id(007);  list.add_tl()->CopyFrom(t2);  // 复制t2到列表的第一个元素  printf("%d - %s\n", list.tl(0).id(), list.tl(0).name().c_str());  list.add_tl()->CopyFrom(t3);  // 复制t3到列表的第二个元素  printf("%d - %s\n", list.tl(1).id(), list.tl(1).name().c_str());  return 0;  
}

编译

g++ main.cpp bp.test.pb.cc -I /opt/protobuf/include -L /opt/protobuf/lib -lprotobuf -lpthread

注:
Protobuf编译时是否依赖lpthread主要取决于你的构建配置。在某些情况下,例如当你使用某些特定的编译器或选项来构建protobuf时,它可能会依赖lpthread。这主要是因为在某些情况下,protobuf会使用线程本地存储(Thread-local Storage,TLS),这需要lpthread库。

运行

./a.out1 - sen
2 - sen
3 - sen3
2 - sen
3 - sen3

参考

1、Ubuntn下安装protobuf和使用详解
2、在Ubuntu中安装Protobuf-2.5.0(详细)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql5.7安装-windows安装版本

下载地址 官网地址:https://www.mysql.com/官网下载地址:https://dev.mysql.com/downloads/mysql/阿里云镜像站下载:https://mirrors.aliyun.com/mysql/华为云镜像站地址:https://mirrors.huaweicloud.com/home华为云镜像站下载:https://mirrors.huaweicloud.com/mysql/Downlo…

Qt/C++摄像头采集/二维码解析/同时采集多路/图片传输/分辨率帧率可调/自动重连

一、前言 本地摄像头的采集可以有多种方式&#xff0c;一般本地摄像头会通过USB的方式连接&#xff0c;在嵌入式上可能大部分是CMOS之类的软带的接口&#xff0c;这些都统称本地摄像头&#xff0c;和网络摄像头最大区别就是一个是通过网络来通信&#xff0c;一个是直接本地通信…

echarts 切换时出现上一次图形残留。

先说结果&#xff1a;悬浮高亮导致。这可能使echarts的bug。 正常情况出现这种问题&#xff0c;一般是setOption 中没有配置notMerge 导致新的配置与旧配置合并。 但是我这里始终配置notMerge: true&#xff0c;但仍然出现这种问题。 最后发现与鼠标悬浮有关。 环境 echar…

【数据采集与预处理】流数据采集工具Flume

一、Flume简介 数据流 &#xff1a;数据流通常被视为一个随时间延续而无限增长的动态数据集合&#xff0c;是一组顺序、大量、快速、连续到达的数据序列。通过对流数据处理&#xff0c;可以进行卫星云图监测、股市走向分析、网络攻击判断、传感器实时信号分析。 &#xff08;…

MYSQL多种提权方式

&#x1f419;MYSQL-提权条件 - 数据库的最高权限用户的密码 - secure-file-priv没进行目录限制 - 拿下了网站的权限&#xff08;通过webshell或者其他方式&#xff09; - 获取到了数据库的账号密码 &#xff08;获取密码&#xff1a;D:/phpstudy/MySQL/data/mysql/user.MYD…

GNSS位移监测站对尾矿库坝体表面位移进行自动化监测

表面位移监测&#xff1a;通过GNSS位移监测站对尾矿库坝体表面位移进行自动化监测&#xff0c;掌握尾矿坝整体表面位置的变化及其变化速率&#xff08;包括平面位移和垂直沉降&#xff09;&#xff0c;确定尾矿坝坝体整体位移变形的情况&#xff0c;是确定尾矿库安全性的重要指…

代码随想录刷题第三十八天| 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

代码随想录刷题第三十八天 动态规划基础理论 斐波那契数 (LC 509) 题目思路&#xff1a; 代码实现&#xff1a; class Solution:def fib(self, n: int) -> int:if n<1: return ndp [0 for _ in range(n1)]dp[1] 1for i in range(2, n1):dp[i] dp[i-1]dp[i-2] …

Java学习苦旅(十八)——详解Java中的二叉树

本篇博客将详细讲解二叉树 文章目录 树型结构简介基本概念表示形式 二叉树概念两种特殊的二叉树二叉树的性质二叉树的存储二叉树的简单创建二叉树的遍历前中后序遍历层序遍历 结尾 树型结构 简介 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09…

使用CentOS 7.6搭建HTTP隧道代理服务器

在现代网络环境中&#xff0c;HTTP隧道代理服务器因其灵活性和安全性而受到广泛关注。CentOS 7.6&#xff0c;作为一个稳定且功能强大的Linux发行版&#xff0c;为搭建此类服务器提供了坚实的基础。 首先&#xff0c;我们需要明确HTTP隧道代理的基本原理。HTTP隧道代理允许客户…

【软件工程】航行敏捷之路:深度解析Scrum框架的精髓

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 软件工程 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 Scrum&#xff08;敏捷开发框架之一&#xff09; 详细介绍和解释&#xff1a; 优缺点&#xff1a; 优点&#xff1a; 缺点&…

【算法】链表-20240105

这里写目录标题 一、LCR 023. 相交链表二、142. 环形链表 II 一、LCR 023. 相交链表 给定两个单链表的头节点 headA 和 headB &#xff0c;请找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 提示&#xff1a; listA 中节点数目为 m list…

unity中0GC优化方案《zstring》

文章目录 序言简介GC带来的问题性能瓶颈玩家体验受损 使用方式 序言 游戏开发秉承遇到好东西要分享&#xff0c;下面介绍zstring&#xff0c;感谢作者开源无私奉献 源码地址&#xff1a;https://github.com/871041532/zstring 简介 GC带来的问题 性能瓶颈 GC暂停主线程执行…