protobuf 安装使用入门

protobuf 简介

1. protobuf 使用场景

protobuf 是一个跨平台和跨语言的数据结构存储和传输的便利工具。
适用场景举例:

  1. 比如 C++ 实现了算法,需要用 Python 或者 C# 去调用,并实现在不同语言间用户自定义复杂结构的数据传输。
  2. 比如用 PyTorch 在 Windows 平台下训练了一个 Python 语言的模型,需要部署到 Linux 系统下面的 C++ 写的软件中。
    跨平台,跨语言的数据结构传输是非常困难的,如果使用 XML 等工具,传输的速度和解析速度会受限制,而 protobuf 很好地解决了这一困难。

2. protobuf 官网

GitHub 地址:
https://github.com/protocolbuffers/protobuf

官方文档地址:
https://developers.google.com/protocol-buffers/

Releases 下载地址:
https://github.com/protocolbuffers/protobuf/releases

安装和使用

1. 下载

进入发布版下载地址:
https://github.com/protocolbuffers/protobuf/releases

可以看到有几种下载类型可以选择:
在这里插入图片描述
这里如果仅仅使用某种语言可以下载对应的文件,如果补血的,下载 protobuf-all-21.4.zip 也行

另外往下可以看到分平台的文件:
在这里插入图片描述
这些是已经 build 好的 Protocol Compiler,可以直接下载了用,也可以自己下载前面源码文件后自己进行 build

这里我们选择下载 protobuf-cpp-3.21.4.zip 作为测试

下载完成后进行解压

2. 安装 CMake

由于这里需要自己进行编译,那么 CMake 是少不了的

CMake 官网:
https://cmake.org/

CMake 下载地址:
https://cmake.org/download/

在这里插入图片描述
这里我们选择下载 Windows 下的安装版 cmake-3.24.0-rc4-windows-x86_64.msi

安装完成后,找到 CMake 的安装目录
我的目录是:
F:\Softwares\CMake\bin
以下是该目录下的文件
在这里插入图片描述

然后将该路径写入环境变量中的 PATH
右键点击“我的电脑”——》选择“属性”
在这里插入图片描述
在“设置”中选择“高级系统设置”

在这里插入图片描述
选择“环境变量”
在这里插入图片描述
选择“Path”,点击“编辑”
在这里插入图片描述
输入 CMake 所在目录,点击“确定”

3. 使用 CMake 进行编译

这里为了演示,采用 CMake 的 UI 模式,确实对于新手来说比较友好

我们先查看下之前下载的 protobuf-cpp-3.21.4.zip 解压后的目录,这里是:
E:\protobuf-cpp-3.21.4\protobuf-3.21.4

目录下的文件列表如下:
在这里插入图片描述
在该目录下新建一个 build 文件夹用于存放编译的输出
在这里插入图片描述
双击桌面 CMake 图标打开
在这里插入图片描述
进入 CMake 界面,输入对应的目录位置
在这里插入图片描述
点击 “Configure”,选择 generator 和 platform
这里我们使用 Visual Studio 2019,x64

在这里插入图片描述
完成后显示 Configuring done
这里有很多选项,可以参考官方文档每一个的作用,这里先不用修改
点击 Generate
在这里插入图片描述
完成后显示 Generating done
进入我们设置的 build 文件夹可以看到编译完成的文件
在这里插入图片描述
在 CMake 界面上点击 Open Project,即可在 Visual Studio 中打开编译完成的项目
在这里插入图片描述
或者也可以在文件目录中打开 protobuf.sln 进入工程
在这里插入图片描述

4. 编译 VS 工程

在解决方案管理器中可以看到如下项目目录
在这里插入图片描述
这里在 Debug 模式下进行测试
在这里插入图片描述
右键点击“解决方案”——》选择“生成解决方案”
这里生成的时间可能比较长,需要耐心等待~~
其实也可以只选择几个需要的项目进行生成,里面一些 test 其实我们这里是用不到的,但是这里演示方便,直接生成了解决方案
在这里插入图片描述

完成后,进入目录:
E:\protobuf-cpp-3.21.4\protobuf-3.21.4\build\Debug
可以看到我们所需的几个文件
在这里插入图片描述

5. 定义 .proto 文件

新建一个纯文本文件 myproto.proto
内容如下

syntax = "proto3";
package mypb;
message helloworld
{
    optional int32 id = 1;
    optional string str = 2;
    optional int32 num = 3;
}

这里的 syntax 表示用的是 protobuf 的哪个版本,现在基本都用 3 了
下面的 package 可以理解为类似 namespace
再往下 message 类似 class,所以 helloworld 就好比是类名
这个类下面有 3 个成员变量,分别是 id,str,num

6. 生成 .cc 和 .h 文件

在 Windows 搜索栏搜索 “cmd”
在这里插入图片描述

打开“命令提示符”
进入到之前 VS 生成解决方案的目录
E:\protobuf-cpp-3.21.4\protobuf-3.21.4\build\Debug
在这里插入图片描述
输入

protoc -I=E:\ --cpp_out=E:\ E:\myproto.proto

 
  • 1

在这里插入图片描述
然后在目录 E:\ 下出现了我们所需的 .cc 和 .h 文件
在这里插入图片描述

7. 创建测试代码

打开 Visual Studio,创建一个新的 C++ 控制台应用
在这里插入图片描述
在这里插入图片描述
项目的所在目录为
E:\ProtobufTest
目录下的文件为
在这里插入图片描述
将 myproto.pb.cc 和 myproto.pb.h 文件拷贝到该目录
在这里插入图片描述
然后将文件添加到 VS 的工程内
在这里插入图片描述
这里要确认我们构建的是 Debug x64
在这里插入图片描述

将 ProtobufTest.cpp 内的代码设置为测试代码:

#include <iostream>
#include <fstream>
#include "myproto.pb.h"
int main(void)
{
	//消息封装
	mypb::helloworld in_msg;
		if (!in_msg.SerializeToOstream(&output)) {
			std::cerr << "failed to serialize in_msg" << std::endl;
			return -1;
		}
	}
	//消息解析
	mypb::helloworld out_msg;
	{
		std::fstream input("./hello.log", std::ios::in | std::ios::binary);
		if (!out_msg.ParseFromIstream(&input)) {
			std::cerr << "failed to parse" << std::endl;
			return -1;
		}
		std::cout << out_msg.id() << std::endl;
		std::cout << out_msg.str() << std::endl;
	}

配置项目属性:
右键点击 “ProtobufTest” 项目——》选择“属性”
选择 “C/C++” ——》“常规”——》“附加包含目录”——》“编辑”
在这里插入图片描述
输入之前下载的源代码所在目录
E:\protobuf-cpp-3.21.4\protobuf-3.21.4\src
在这里插入图片描述
选择“链接器”——》“常规”——》“附加库目录”
在这里插入图片描述
输入之前 VS 编译的 protobuf 解决方案所生成的 lib 所在目录
E:\protobuf-cpp-3.21.4\protobuf-3.21.4\build\Debug
在这里插入图片描述
选择“链接器”——》“输入”——》“附加依赖项”
在这里插入图片描述
输入 libprotobufd.lib 和 libprotocd.lib
在这里插入图片描述
至此全部设置完毕!
点击“生成”
在这里插入图片描述
运行后输出
在这里插入图片描述

Logo

华为云1024程序员节送福利,参与活动赢单人4000元礼包,更有热门技术干货免费学习

更多推荐