史上最详细:Qt--编译配置Protobuf(windows10)

一、Protobuf简介

protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。

Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。

你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏由旧数据结构编译的已部署程序。

ProtocolBuffer拥有多项比XML更高级的串行化结构数据的特性,ProtocolBuffer:

  • 更简单

  • 小3-10倍

  • 快20-100倍

  • 更少的歧义

  • 可以方便的生成数据存取类


二、前期准备工作

2.1、下载并安装Qt

QT的下载地址,建议使用5.7以上版本:https://download.qt.io/archive/qt/

选择MinGW 版本选择 next 即可完成安装。


2.2、下载cmake并安装

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

根据向导使用默认选项设置即可完成安装。


2.3、下载protobuf的源码

Protbuf源码下载地址:https://github.com/protocolbuffers/protobuf/releases

选择c++版本源码下载到本地,并解压缩
在这里插入图片描述


2.4、下载并安装MinGW

mingw-get-setup.exe下载地址:http://www.mingw.org/
在这里插入图片描述
注意:需要科学上网,否则会一直卡住,提示错误,连接服务器失败。而且科学上网也会失败(不一定一次就能安装好),不断的继续,一定可以安装好的。

安装教程

按照安装指导到达这一步后,左侧选中Basic Setup,然后对右侧的每一项都鼠标右键选择Mark for installation

在这里插入图片描述
然后选择菜单栏Installation中的Apply Changes,点击Apply开始下载安装

在这里插入图片描述
只需要等待安装完成即可,如下所示:

在这里插入图片描述
检测安装目录下\bin中是否有mingw32-make.exe,有则安装成功

在这里插入图片描述


三、编译Protobuf

3.1、在下载的Protobuf源码目录下新建build文件夹,用来存放编译结果

在这里插入图片描述


3.2、打开CMake,进行配置

在这里插入图片描述

注意项

  • where is the source code:选择protobuf源码下的cmake目录;
  • where to build the binaries:选择在protobuf源码下新建build目录;
  • 如果出现了如下错误,则点击
  • CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
  • 点击Advanced,将CMAKE_MAKE_PROGRAM项后面的路径设置为MinGW/bin/mingw32-make.exe,重新点击Configure,问题解决!

3.3、选中如下两项,点击Generate进行生成

在这里插入图片描述


3.4、生成完毕如下图所示,在build文件夹中也会生成一些文件

在这里插入图片描述


3.5、在build文件夹下按下shift键,鼠标右键打开命令行,输入mingw32-make开始编译

在这里插入图片描述
在这里插入图片描述
编译结束后,我们打开build文件夹可以看到生成的库文件和protoc.exe,如下图所示:

在这里插入图片描述


四、在Qt中配置protobuf

4.1、编写一个简单.proto后缀文件(注意:后缀必须改为.proto)

在这里插入图片描述


4.2、使用protoc.exe编译.proto文件生成.h.c文件

注意:需要把protoc.exe所在路径加到系统环境变量中

在这里插入图片描述
在这里插入图片描述
在Windows上可以新建批处理文件(.bat),加入如下代码

@echo on
setlocal EnableDelayedExpansion

set project_name=School

set cur_disk=%~d0
set proto_file_dir=%~dp0

%cur_disk%

cd /D %proto_file_dir%

del /F %project_name%.pb.cc
del /F %project_name%.pb.h

"protoc.exe" --proto_path %proto_file_dir% --cpp_out %proto_file_dir% %proto_file_dir%%project_name%.proto

pause

双击即可自动生成.cc.h文件

注意:需保证protobuf添加到系统变量里,或者当前路径下存在protoc.exe


4.3、新建Qt工程,并在.pro文件中添加protobuf源码路径和编译生成的库

INCLUDEPATH += D:\Qt\protobuf-cpp-3.13.0\protobuf-3.13.0\src
LIBS += -L D:\Qt\protobuf-cpp-3.13.0\build -lprotobuf

在这里插入图片描述


4.4、将生成的.h.c文件复制到工程目录下,并添加进工程

在这里插入图片描述
在这里插入图片描述


4.5、编写测试代码

#include "mainwindow.h"

#include <QApplication>
#include <testData.pb.h> //添加头文件
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    school::Student stu; //定义对象,每个message都相当于一个struct
    stu.set_chinese(90);
    qDebug()<<"Chinese: "<<stu.chinese();

    MainWindow w;
    w.show();
    return a.exec();
}

在这里插入图片描述

  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
`com.google.protobuf:protobuf-java` 是 Google Protocol Buffers 的 Java 实现库,它的作用是提供了 Protocol Buffers 的编解码功能,用于在不同的系统之间高效地进行数据序列化和反序列化。 Protocol Buffers(简称 Protobuf)是一种轻量级、高效的数据交换格式,它可以将结构化数据序列化为二进制格式,并支持跨不同语言和平台的数据交换。通过使用 Protobuf,开发者可以定义数据结构的消息类型,并生成相应的代码,用于在不同系统之间传输和存储数据。 `com.google.protobuf:protobuf-java` 提供了 Protobuf 在 Java 中的实现,包含了 Protobuf 的编解码器、消息定义语言、工具等。 具体来说,`com.google.protobuf:protobuf-java` 的作用如下: 1. 数据序列化和反序列化:`protobuf-java` 提供了 Protobuf 的编解码功能,可以将 Protobuf 消息对象序列化为二进制数据,或将二进制数据反序列化为 Protobuf 消息对象。这样可以在不同的系统之间高效地传输和存储结构化数据。 2. 消息定义语言:`protobuf-java` 包含了 Protobuf 的消息定义语言(Protocol Buffers IDL),开发者可以使用该语言定义消息的结构和字段,并通过编译生成相应的 Java 代码。 3. 工具支持:`protobuf-java` 提供了一些工具,如编译器(protoc)和插件,用于生成和处理 Protobuf 相关的代码和文件。 总之,`com.google.protobuf:protobuf-java` 是 Google Protocol Buffers 的 Java 实现库,提供了 Protobuf 的编解码功能、消息定义语言和工具支持。通过使用 Protobuf,开发者可以方便地序列化和反序列化结构化数据,并实现不同系统之间的高效数据交换。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝勒里恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值