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.mzph.cn/news/600310.shtml

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

相关文章

package-info.java delete

package-info.java delete

监控oracle表空间是否超过80%

先点赞后观看&#xff0c;养成好习惯 1.监控脚本 oracle_cron.sh source /home/oracle/.bash_profile sqlplus -s / as sysdba > /tmp/tablespace.log<<EOF CLEAR COLUMNS BREAKS COMPUTES set lines 134 pages 200 COLUMN STATUS …

如何实现安卓端与苹果端互通的多种方案

随着移动设备用户的爆炸性增长&#xff0c;跨平台应用开发变得尤为重要。在Android与iOS之间实现互通对于推广应用、增加用户覆盖面和提升用户体验有至关重要的作用。以下是实现Android与iOS互通的多种方案&#xff0c;以及每种方案的实现方法、细节注意点、适合团队的规模和建…

普通BUG

IDEA包折叠 如果自动紧凑包名,则有些时候创建新包或类的时候不能达到想要的摆放层级关系,此时右上角搜索按钮搜hide middle,关掉紧凑即可,然后既可以每层一个包不折叠. 效果: 20240105println输出多个参数 int a 10;int b 20;报错println是可以输出多个参数的,但不支持直接用…

CentOS安装Redis7(Alibaba Cloud Linux兼容)

安装Redis7 下载redis的linux版本压缩包 redis-7.0.11.tar.gz 安装gcc编译环境 yum install -y gcc-c解压redis压缩包&#xff0c;并进入 [rootiZ2ze6psmhg970tbycgrbpZ ~]# tar -zxvf redis-7.0.11.tar.gz [rootiZ2ze6psmhg970tbycgrbpZ ~]# cd redis-7.0.11/查看redis源码…

WEB 3D技术 three.js 顶点旋转

我们来说说几何体顶点的旋转 官网搜索 BufferGeometry 这里 我们有 x y z 三个轴的旋转 例如 我们这样的代码 import ./style.css import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"; i…

vue+springboot项目上传部署tomcat

下载及安装Tomcat 进入tomcat官网&#xff0c;Tomcat官网 选择需要下载的版本&#xff0c;点击下载下载路径一定要记住&#xff0c;并且路径中尽量不要有中文 下载后是压缩包 .zip&#xff0c;解压后 tomcat系统各个文件夹目录是什么意义&#xff1a; bin&#xff1a;放置的是…

【MATLAB】CEEMD_LSTM神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 CEEMD-LSTM神经网络时序预测算法是一种结合了完全扩展经验模态分解&#xff08;CEEMD&#xff09;和长短期记忆神经网络&#xff08;LSTM&#xff09;的时间序列预测方法。 CEEMD是一种改…

全程云OA ajax.ashx SQL注入漏洞复现

0x01 产品简介 全程云OA为企业提供日常办公管理、公文管理、工作请示、汇报、档案、知识体系、预算控制等26个功能,超过100多个子模块。为企业内部提供高效、畅通的信息渠道,同时也能大力推动公司信息系统发展,提高企业的办公自动化程度和综合管理水平,加快企业信息的流通…

python版本控制-pyenv

前言 日常开发中&#xff0c;我喜欢开发环境比实际运行环境高一个版本。因为这似乎有助于&#xff0c;让程序不断适应高版本的运行环境。 但是&#xff0c;今天遇到一个例外 — python。我系统默认的python版本是3.9&#xff0c;但是CI上的版本是3.6。众所周知&#xff0c;py…

TikTok需要的原生IP是什么?海外独享原生IP地址如何获取?

相信很多做跨境店铺或者TikTok直播的小伙伴都听说过”原生IP”,网络上关于它的判定方法也五花八门&#xff0c;今天小编以自身跨境经验来为大家介绍原生IP是什么?有什么好处&#xff1f;如何获取&#xff0c;感兴趣请继续看下去&#xff01; 一、什么是原生IP/非原生IP? 原生…

OpenCV-16图像的基本变换

一、图像的放大与缩小 1. 对小狗图片进行缩放 使用API----resize&#xff08;src, dsize, [,dst,[fx[,fy[,interpolation]]]]&#xff09; src&#xff1a;要缩放的图像。 dsize&#xff1a;缩放之后的图像大小&#xff0c;元组和列表表示都可以。 dst&#xff1a;可选参数…

Jmeter 性能 —— 电商系统TPS计算

1、怎么计算得出TPS指标 ①第一个通过运维那边给的生产数据&#xff0c;看一下生产进件有多少&#xff0c;计算得来的&#xff0c;如果没有生产数据&#xff0c;或者不过就看如下的方法 ②第二个就是根据最近一个月的实际访问数据&#xff0c;比如每天调用了多少个接口&#…

src refspec master does not match any

新项目推送至 Git 空仓库时抛出如下异常 src refspec master does not match any 初始化 init 都做了但反复尝试 git push -u origin master 均无果 后发现权限不够 .... 起初设置为开发者,后变更为了主程序员再次尝试 push 成功 .... 以上便是此次分享的全部内容&#xff0c;…

支持 input 函数的在线 python 运行环境 - 基于队列

支持 input 函数的在线 python 运行环境 - 基于队列 思路两次用户输入三次用户输入 实现前端使用 vue element uiWindows 环境的执行器子进程需要执行的代码 代码仓库参考 本文提供了一种方式来实现支持 input 函数&#xff0c;即支持用户输的在线 python 运行环境。效果如下图…

什么是谐波减速机?日本Harmonic哈默纳科谐波减速机有哪些优点?

一、什么是谐波减速机&#xff1f; 谐波减速装置最早期被叫做“strain wave gearing”&#xff0c;直译过来为“应变波齿轮”。其后被HarmonicDrive Systems 公司大规模商业实用化后&#xff0c;经过二次翻译后&#xff0c;中文名称才将其称为“谐波齿轮传动”。 谐波减速机是…

Kubernetes(K8s)命令大全

Kubernetes&#xff08;简称K8s&#xff09;是一种开源的容器编排平台&#xff0c;用于自动化应用程序的部署、扩展和管理。通过Kubernetes&#xff0c;您可以轻松地管理容器化应用&#xff0c;实现高可用性、弹性伸缩以及简化的部署和维护。以下是一份Kubernetes常用命令的大全…

数据结构第六弹---带头双向循环链表

双向循环链表 1、带头双向循环链表概念2、带头双向循环链表的优势3、带头双向循环链表的实现3.1、头文件包含和结构定义3.2、创建新结点3.3、打印3.4、初始化3.5、销毁3.6、尾插3.7、头插3.8、头删3.9、尾删3.10、查找3.11、在pos之前插入3.12、删除pos位置3.13、判断是否为空3…

云原生战专题 | 深入浅出分析云原生微服务的技术结构和架构设计

深入浅出分析云原生微服务的技术结构和架构设计 云原生容器技术背景容器编排Kubernetes控制平面的四大组件Kubernetes在容器编排中的设计要点 云原生微服务典型架构第一代微服务架构第二代微服务架构第三代微服务架构第四代微服务架构 未来的云原生架构 — Serverless 云原生容…

springboot + vue3实现增删改查分页操作

springboot vue3实现增删改查分页操作 环境最终实现效果实现功能主要框架代码实现数据库后端前端 注意事项 环境 jdk17 vue3 最终实现效果 实现功能 添加用户&#xff0c;禁用&#xff0c;启用&#xff0c;删除&#xff0c;编辑&#xff0c;分页查询 主要框架 后端 spri…