protobuf c++开发快速上手指南

server/2024/12/16 5:52:44/

1、环境准备

在c++环境使用 protobuf,需要安装protobuf runtime以及protobuf的编译器:protoc,其作用如下表格:

需要安装的环境作用
protoc将proto文件编译成c++源码
protobuf runtime编译c++源码需要链接到protobuf库

注意:protoc与runtime的版本必须一致,否则会导致后面业务代码编译失败,当前最新版本为:V29.1,我们选用最新版本进行安装。

1.1 protoc编译器安装

这一步可选,runtime安装时,也会编译protoc编译器。

protoc编译器的下载地址:Release Protocol Buffers v29.1 · protocolbuffers/protobuf · GitHub

下载对应环境的编译好的版本,解压后,共有三个文件夹:

protoc编译器位于bin目录下,将protoc放到开发环境的$PATH目录下即可。 

1.2 c++ protobuf runtime安装

1.2.1 c++ protobuf编译工具cmake安装

cmake下载地址:Download CMake

cmake安装很简单,可以直接下载可执行文件,也可以通过源码安装。

下载3.28.1版本,并解压:

将bin目录下cmake可执行文件复制到usr/bin或者其他存在于环境变量PATH的路径中。

将share文件夹下:cmake-3.28 拷贝到/usr/share路径下:

 

1.2.2 c++ protobuf源码编译

首先下载源码,最新发布版本V29.1

切换到v29.1版本后,更新代码:

git pull origin v29.1

之后拉取依赖:

git submodule update --init --recursive

 

开始编译源码,禁止单元测试,同时protobuf要求c++版本到17 

执行编译:make -j8

 

优秀,编译很快,比我阿里云上C2M4的机器快多了。接下来看一下编译产出:

protoc也编译出来了,复制到PATH目录即可使用

同时install  protobuf库:sudo make install

2、代码调试

2.1 proto编写&编译

proto我们就使用官方的实例代码,只是将proto2改成proto3,因为proto2不常用了。

syntax = "proto3";package tutorial;message Person {optional string name = 1;optional int32 id = 2;optional string email = 3;enum PhoneType {PHONE_TYPE_UNSPECIFIED = 0;PHONE_TYPE_MOBILE = 1;PHONE_TYPE_HOME = 2;PHONE_TYPE_WORK = 3;}message PhoneNumber {optional string number = 1;optional PhoneType type = 2;}repeated PhoneNumber phones = 4;
}message AddressBook {repeated Person people = 1;
}

编译protobuf,使用protoc工具,编译protobuf为c++语言:protoc -I=./ --cpp_out=./ address_book.proto

2.2 测试代码

主程序:

#include <iostream>
#include "address_book.pb.h"
using namespace std;int main() {string names[3] = {"John", "Jane", "Jack"};string emails[3] = {"john.doe@example.com", "tom.dan@example.com","lucy_lily@163.com"};tutorial::AddressBook address_book;for (size_t i = 0; i < 3; i++) {/* code */tutorial::Person* person = address_book.add_people();person->set_name(names[i]);person->set_id(i+1);person->set_email(emails[i]);}for (size_t i = 0; i < address_book.people_size(); i++) {cout << "Name: " << address_book.people(i).name() << endl;cout << "ID: " << address_book.people(i).id() << endl;cout << "Email: " << address_book.people(i).email() << endl;}return 0;
}

 CMakeLists.txt:   

cmake_minimum_required(VERSION 3.18)
project(protobuf-study)
# Find required protobuf package
find_package(protobuf CONFIG REQUIRED)if(protobuf_FOUND)message(STATUS "Using Protocol Buffers ${protobuf_VERSION}")
endif()include_directories(${PROJECT_BINARY_DIR})
aux_source_directory(. SRC)add_executable(protobuf-study ${SRC})
target_link_libraries(protobuf-study protobuf::libprotobuf)

编译测试代码,注意由于新版本protobuf依赖c++17,因此编译测试代码时也需要指定c++版本,否则会报错:cmake .. -DCMAKE_CXX_STANDARD=17

运行可执行文件: 

大功告成。 


http://www.ppmy.cn/server/150546.html

相关文章

多通道卷积

3通道的特征图经过一一对应的3通道的卷积核&#xff0c;生成一个新的特征图 卷积层&#xff1a; 6个卷积核组&#xff0c;3个通道每个通道有一个55的卷积核&#xff0c;3个通道为一组 以下这个图可以更直观的概括多通道多核的卷积过程&#xff1a;&#xff08;一个卷积核组&…

【C++】- 掌握STL List类:带你探索双向链表的魅力

文章目录 前言&#xff1a;一.list的介绍及使用1. list的介绍2. list的使用2.1 list的构造2.2 list iterator的使用2.3 list capacity2.4 list element access2.5 list modifiers2.6 list的迭代器失效 二.list的模拟实现1. list的节点2. list的成员变量3.list迭代器相关问题3.1…

Github 2024-12-11C开源项目日报Top10

根据Github Trendings的统计,今日(2024-12-11统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目10Netdata: 开源实时监控平台 创建周期:4020 天开发语言:C协议类型:GNU General Public License v3.0Star数量:68982 个Fork数量:577…

fiddler设置抓取https,还抓取不到https如何解决?

一、清楚 C:\Users\Admin\AppData\Roaming\Microsoft\Crypto\RSA 目录下所有文件&#xff08;首次安装fiddler请忽略&#xff09; 二、清除电脑上的根证书&#xff0c;WINR快捷键&#xff0c;输入&#xff1a;certmgr.msc&#xff0c; 然后回车&#xff0c;查找所有fiddler证书…

人工智能大语言模型起源篇(二),从通用语言微调到驾驭LLM

上一篇&#xff1a;《人工智能大语言模型起源篇&#xff08;一&#xff09;&#xff0c;从哪里开始》 &#xff08;5&#xff09;Howard 和 Ruder 于2018年发表的《Universal Language Model Fine-tuning for Text Classification》&#xff0c;https://arxiv.org/abs/1801.06…

GitHub 开源仓库推荐:poe2skills

poe2skills是一个专为《流放之路 2》玩家和开发者设计的开源项目。它收集了游戏中所有的技能和被动宝石信息&#xff0c;帮助玩家更好地理解和利用游戏中的各种机制。对于那些希望深入挖掘游戏潜力的玩家来说&#xff0c;这个仓库无疑是一个宝贵的资源。 功能亮点 全面的技能数…

30、使用ESP8266跟SG90舵机制作四足蜘蛛机器人

目录 1、简介 2、使用例子 3、代码解析 4、资源下载 正文 1、简介 本篇使用ESP8266跟SG90舵机制作四足蜘蛛机器人,使用的180度舵机有8个,需要一块16路舵机控制板,也可以使用小一点的控制板8路也够了。下面开始今天的教程,源码在文章末尾自行下载,力求大家都能看懂。…

macOS nc 接收文件

查看传输进度 brew install pv接收方 nc -l 2222 | pv > synergy-3.2.1-macos-arm64.dmg发送方 nc 192.168.1.3 2222 < synergy-3.2.1-macos-arm64.dmg╰─➤ nc -l 2222 | pv > synergy-3.2.1-macos-arm64.dmg125MiB 0:00:57 [2.18MiB/s] [ <…