【QT5.9 + protobuf】一、(win10/c++) 环境配置踩坑记录

要在QT 中使用protobuf的环境配置:

1. 选择合适的protobuf版本

必须选择qt5.9 对应mingw编译器所适配的protobuf 版本。最开始直接下载protobuf3.19版本,结果qt5.9对应的编译器版本为 GNU 5.* ,编译不过去。会报出 :non-literal type ‘google::protobuf::internal::CallOnceInitializedMutexstd::mutex 的错误,如下所示:
在这里插入图片描述

D:\360downloads\protobuf-cpp-3.19.1\protobuf-3.19.1\src\google\protobuf\stubs\mutex.h:124: error: temporary of non-literal type ‘google::protobuf::internal::CallOnceInitializedMutexstd::mutex’ in a constant expression
constexpr WrappedMutex() {}

出现上述错误是因为,编译protobuf库的时候选择了高版本,编译通过了,而例用protobuf库编译demo时,用了qt5.9自带的较低版本的mingw编译器,所以编译不通过。
尝试将qt的编译器改为单独装的高版本的mingw,发现此路不通(不太容易还有别的错误 )。本来想换更高版本的qt但是高版本的qt安装也很费劲。
后来选择protobuf3.16-rc1这个版本是兼容qt5.9的!链接为:https://github.com/protocolbuffers/protobuf/releases?page=3protobuf下载地址

2. 编译protobuf 3.16

这里只记录win版本的编译过程:

  1. 首先下载cmake-gui,已经装了略过此步。下载地址:https://cmake.org/download/cmake-gui下载链接,我这里选择的是cmake-gui3.22最近的一版,cmake是兼容的。然后安装cmake,按照安装页面,点点点就好了。

  2. 下载protobuf3.16cpp版本,链接如上。

  3. 配置qt5.9的工具链为系统的编译工具,以便cmake-gui读取的是与qt5.9配套的工具链。

    找到对应qt工具链安装的路径 如:D:\Qt\Qt5.9.0\Tools\mingw530_32\bin
    将该路径配置到系统path中,并重启。
    在这里插入图片描述

  4. 编译protobuf静态库:
    打开cmake -gui 选择proto源码的cmake 文件夹 ,创建build的文件夹,并选择为编译目标文件夹:
    点击configure 然后点击generate.在这里插入图片描述
    如果没有ZLIB可以不选。
    完成后,可以在对应的build的文件夹中看到makefile等文件。然后在对应build文件夹路径下打开cmd。
    然后 输入 mingw32-make 等待编译完成。
    生成对应 libprotobuf.a 等静态库。还有proto.exe的可执行二进制程序。
    如果懒得编译库可以看这里,编译好的库可以直接下载使用https://download.csdn.net/download/hyperspace88466/75075496编译好的库直接下载点这里

3. 编译一个demo验证protobuf配置成功

具体例子见:https://blog.csdn.net/jamin_liu_90/article/details/83244335
编译demo验证protobuf配置成功见这里
以下为转载内容

  • 由于在使用protobuf时要先构建一个proto文件,然后生成对应的头文件和源文件,才能够使用。所以在build文件中构建protobuild.bat脚本文件,在里面添加如下内容。然后将build文件路径添加到环境变量中。如果想要生成某个proto文件对应的头文件和源文件,可以在cmd进入到proto文件所在目录下,输入protobuild *****.proto来进行生成。

  • 调试示例

    建立config.proto文件,放在build文件夹下,代码如下:

    syntax = "proto3";  
     
    package config;   
     
    message VoiceConfig{  
     
      int32 sample_rate = 1;  
     
      int32 mic_num = 2;  
     
      string voiceserver_address = 3;  
     
      int32 wakeup_sensitivity = 4 ;  
     
      int32 bargein_sensitivity = 5;  
     
      int32 audo_outtype = 6;  
     
    }  
    生成 config.pb.h 和 config.pb.cc 建立一个Qt项目
    
    其中主函数中代码如下:
    
     
    #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();
     
    }
    

    然后我们还需要配置一下头文件和protocolbuffer的库文件

    在.pro 文件中加入

    INCLUDEPATH += “C:***\protobuf-3.6.1\src”
    然后将libprotobuf.a库文件进行导入

    其中,链接选择“静态”,只选择Windows。

    原文链接:https://blog.csdn.net/jamin_liu_90/article/details/83244335

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值