• protobuf 安装使用入门详细介绍新手教程(Windows,Visual Studio 2019,C++)


    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这里的 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 
    #include 
    #include "myproto.pb.h"
    
    int main(void)
    {
    	//消息封装
    	mypb::helloworld in_msg;
    	{
    		in_msg.set_id(9);
    		in_msg.set_str("Jack");
    		std::fstream output("./hello.log", std::ios::out | std::ios::trunc | std::ios::binary);
    		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;
    	}
    
    	getchar();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    配置项目属性:
    右键点击 “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
    在这里插入图片描述
    至此全部设置完毕!
    点击“生成”
    在这里插入图片描述
    运行后输出
    在这里插入图片描述

  • 相关阅读:
    34【源码】数据可视化:基于 Echarts + Python 动态实时大屏 - 视频平台
    外贸出口游戏设备亚马逊CE认证电磁兼容性(EMC)测试解析
    thinkPhp5返回某些指定字段
    Linux红帽(RHCE)认证学习笔记
    Spark 离线开发框架设计与实现
    前端异常监控平台之Sentry落地
    机器学习笔记之高斯过程(一)——基本介绍
    WPS与Office的恩怨情仇,这6个电脑冷知识,你知道几个?
    数说故事×IDEA荣获语言与智能技术竞赛「视频语义理解赛题」季军
    关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
  • 原文地址:https://blog.csdn.net/qq_42067550/article/details/126010113