zoukankan      html  css  js  c++  java
  • QT中使用MinGW 编译的protobuf库--包含库的生成和使用

    QT中使用MinGW 编译的protobuf库--包含库的生成和使用

    0前言

    最近要在QT中使用protobuf,于是需要编译protobuf静态库文件,导入qt使用,没想到过程非常曲折,各种报错各种坑,在网上参考了很多文章,最后终于成功了,现在将QT中使用protobuf的整个配置过程都写出来提供给大家,希望能够帮助到大家。

    1准备工作

    1.1 下载QT并安装
    下载QT5.6.0,到D盘的QT文件夹,并且加入系统环境变量
    D:QtQt5.6.0Toolsmingw492_32in;D:QtQt5.6.05.6mingw49_32in;D:QtQt5.6.0Toolsmingw492_32i686-w64-mingw32in
    1.2 下载cmake3.11.0并安装
    在https://cmake.org/download/中下载Cmake
    安装到D:anzhuangbaocmake-3.11.0-rc1-win32-x86
    加入系统环境变量
    ;D:anzhuangbaocmake-3.11.0-rc1-win32-x86cmake-3.11.0-rc1-win32-x86in
    1.3 下载protobuf3.3.0的源码
    在https://github.com/google/protobuf/releases中下载3.3.0的源码,如图所示
    在这里插入图片描述
    就是protobuf-cpp-3.3.0.zip
    下载到D盘根目录,解压。

    2生成protobuf库文件

    2.1 CMAKE的设置与库的生成
    打开cmake软件,选择编译的源为protobuf源码中的cmake文件夹,之后在D盘根目录下建立输出目录,为output330,设置为目标文件夹,如图所示。在这里插入图片描述
    在这里插入图片描述

    然后点击configure按键,选择MinGW编译,默认的编译器即可,也就是QT自带的编译器,这样比较保险,如果本机还有别的MinGW版本,建议不要选,就选QT自带的编译器即可,如图所示。

    在这里插入图片描述
    点击finish按键,开始配置。配置结束后,点击Grouped和Advance

    在这里插入图片描述
    点开protobuf列表,只勾选一个MSVC_STATIC_RUNTIME,如下图所示。

    在这里插入图片描述
    点击Generate生成,如图所示。

    在这里插入图片描述
    生成结束后,我们发现output330文件夹中出现了makefile文件,如图所示。

    在这里插入图片描述
    打开cmd,进入output330文件夹,输入mingw32-make命令,开始编译源代码,如下图所示。

    在这里插入图片描述
    等待几分钟编译结束。

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

    在这里插入图片描述
    如果没有生成protoc.exe,则可以到刚才https://github.com/google/protobuf/releases中下载protoc-3.3.0-win32.zip,bin文件中就是这个exe.

    在这里插入图片描述

    2.2 proto.cpp和.h的生成
    在D盘根目录下新建一个文件testData.proto,后缀名为.proto,在文件中输入代码如下:

    syntax = "proto3";  
    package config;   
    message VoiceConfig{  
      int32 sample_rate = 1;  
      int32 mic_num = 2;  
    }


    在这里插入图片描述
    将之前生成的protoc.exe拷贝到C:windowssystem32中,并重命名为protoc330.exe,如图所示。

    在这里插入图片描述
    打开cmd,进入D盘根目录,也就是testData所在目录,输入如下命令,可在目录中生成.cpp和.h文件。

    在这里插入图片描述

    至此,库文件和源文件,头文件都生成完毕了。

    3在QT中测试protobuf的使用

    3.1 建立工程,配置.pro
    建立QT控制台工程,导入生成的.cpp和.h文件,打开.pro文件,配置如下:
    在这里插入图片描述
    3.2 编写代码测试
    在main中输入如下代码,测试结果如下图所示。

    #include <QCoreApplication>
    #include <QDebug>
    #include <QString>
    #include <string>
     
    #include <config.pb.h>
     
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
     
        config::VoiceConfig vc;
     
        QString ipaddr="192.168.0.136";
     
        std::string s = ipaddr.toStdString();
     
        vc.set_sample_rate(32000);
        vc.set_allocated_voiceserver_address(&s);
        vc.set_wakeup_sensitivity(50);
        vc.set_bargein_sensitivity(50);
        vc.set_audo_outtype(1);
     
        std::string sdata="";
        vc.SerializeToString(&sdata);
     
        qDebug()<<"size:"<<sdata.size();
     
        config::VoiceConfig de;
     
        de.ParseFromString(sdata);
        qDebug()<<"sample_rate:"<<de.sample_rate();
        qDebug()<<"address:"<<QString::fromStdString(de.voiceserver_address());
        qDebug()<<"wakeup_sensitivity:"<<de.wakeup_sensitivity();
     
        return a.exec();
    }


    在这里插入图片描述
    代码中将数据结构中的两个变量赋值为7,9,做了序列化和反序列化,解析后数据打印为7,9说明protobuf在QT中使用成功!

    4结语

    前前后后花了四天时间才搞定QT的protobuf,中间踩了很多坑,有人说必须动态编译,还有的说要下载msys来编译,中间浪费了很多时间,以上是我亲自测试总结的方法,希望大家能用上,最后,我将已经编译好的protobuf3.3.0的库文件和protoc.exe打包上传,需要的可以直接下载使用,https://download.csdn.net/download/f1jiaziqing2/10759471 免去了编译的步骤。

  • 相关阅读:
    docker从零开始 存储(三)bind mounts
    docker从零开始 存储(二)volumes 挂载
    docker从零开始 存储(一)存储概述
    docker从零开始网络(七) 配置daemon和容器
    docker从零开始网络(六)Macvlan
    docker从零开始网络(五)null网络
    docker从零开始网络(四 ) host网络
    docker从零开始网络(三) overly(覆盖)网络
    docker从零开始网络(二)桥接网络
    docker从零开始网络(一)概述
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/10253840.html
Copyright © 2011-2022 走看看