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

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

  • 0前言
  • 1准备工作
  • 2生成protobuf库文件
  • 3在QT中测试protobuf的使用
  • 4结语

0前言

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

1准备工作

1.1 下载QT并安装

下载QT5.6.0,到D盘的QT文件夹,并且加入系统环境变量

D:\Qt\Qt5.6.0\Tools\mingw492_32\bin;D:\Qt\Qt5.6.0\5.6\mingw49_32\bin;D:\Qt\Qt5.6.0\Tools\mingw492_32\i686-w64-mingw32\bin

1.2 下载cmake3.11.0并安装

在https://cmake.org/download/中下载Cmake

安装到D:\anzhuangbao\cmake-3.11.0-rc1-win32-x86

加入系统环境变量

;D:\anzhuangbao\cmake-3.11.0-rc1-win32-x86\cmake-3.11.0-rc1-win32-x86\bin

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:\windows\system32中,并重命名为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 免去了编译的步骤。

原文地址:https://www.cnblogs.com/h2zZhou/p/10253840.html

时间: 2024-10-12 08:29:11

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

在Windows中使用MinGW编译X264

转自:http://www.cnblogs.com/xiongjiaji/archive/2012/06/08/2541265.html 参考:http://ayobamiadewole.com/Blog/Others/x264compilation.aspx 注意:安装完MinGW后,要把“安装路径\MinGW\bin”加到PATH环境变量中.否则在./configure的时候会“No working C compiler found”. 具体步骤如下: For someone coming

Qt中添加OpenCV库

配置在Qt中的OpenCV,看了很多“教程”,最终成功.记一下过程. 本机配置: window7 32位系统: qt-opensource-windows-x86-mingw492-5.5.1: OpenCV2.4.10. 对于我来说配置过程比较难,因为目前我没用过Qt和Cmake,之前一直用VS编译C++,也没有用过MinGW,所以看教程中的各种命令或者执行文件都比较费时.这次各种尝试后成功.参考资料的连接在最后,其中帮助我最大的就是那一篇纯英文的,很详细. 前期准备 Qt5的opensour

用minGW编译ffmpeg(供替换opencv中引用的ffmpeg库)

在安装好的opencv目录下找到路径:opencv245\opencv\3rdparty\ffmpeg,此路径下有一个readme.txt文件,内容如下所示: The build script is to be fixed. Right now it assumes that 32-bit MinGW is in the system path and 64-bit mingw is installed to c:\Apps\MinGW64. It is important that gcc i

Qt中加载Libevent静态库(通过reimp和rs两条语句将lib转为a)

文章来源:http://blog.sina.com.cn/s/blog_731bf4c90102wnpr.html 本文仅是个人经验总结,若有错误欢迎指教! 最近要做一个跨平台的项目,同时也涉及到网络数据传输,所以考虑采用Qt和Libevent. 1.vs编译libevent 参考网上众多通过VS编译Libevent的文章(http://www.cnblogs.com/luxiaoxun/p/3603399.html),成功编译得到了?libevent.lib.libevent_core.lib

使用MinGW编译Qt Creator

Qt Creator中编译项目使用的是MinGW/g++编译器,而Qt提供的Qt Creator本身是由MSVC2013编译的,二者的build key不同,故而Qt Creator中编译的插件无法在Qt Creator中使用(这个搭配真的是滑天下之大稽呀).为了在Qt Creator中使用自定义插件,有两种方法,一种是也使用MSVC编译器编译插件,另一种就是使用MinGW重新编译Qt Creator.以下记录下使用MinGW编译器编译Qt Creator的过程,插件的制作可参考Qt Creat

在Windows环境下使用MinGW编译Qt 4.8.6

1.修改环境变量工具推荐:Rapid Environment Editor.官网:http://www.rapidee.com/ 修改前请先备份当前的环境变量.然后: (1)检查系统变量path,删除有关mingw其他版本等信息,以免与后续的mingw32-make冲突. (2)检查用户变量INCLUDE.LIB.PATH.MSDevDir和MSVCDir,删除有关\Microsoft Visual Studio\VC98的信息,因为它们会与后续的mingw32-make冲突,导致编译出错. 2

QT中静态库的生成与使用

一. 静态库的生成    1. 测试目录: lib    2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为"I'm in class MyWindow";    3. 编写项目文件: mywindow.pro       注意两点:       TEMPLATE = lib       CONFIG   += staticlib    4. 生成Makefile:       qmake    5.

QT中使用Glut库

用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是说“glutSolidSphere”: 找不到标识符,就是说没有这个函数的声明.接下来就来安装glut库: 1.先下载glut库 http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip. 2.将下载下来的文件解压,将glut32.lib和glut.lib两个lib文件移到qt

QT中共享库的生成与使用

一. 静态库的生成1. 测试目录: lib2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为"I'm in class MyWindow";3. 编写项目文件: mywindow.pro注意两点:TEMPLATE = libCONFIG += staticlib4. 生成Makefile:qmake5. 编译生成静态库libmywindow.amake 二. 静态库的使用1. 测试目录: test2.