编译环境: Win10 x64
编译器: mingw32 cmake
使用场景: Qt5.11.1
protobuf源码下载地址:https://github.com/google/protobuf
参照:https://blog.csdn.net/qq_24894347/article/details/82966217
1、下载protobuf源码,并且安装cmake。
我下载了cmake-3.13.0-rc1-win64-x64.msi版本,直接点击安装,大家也可以下载.zip版本。zip版本直接解压,不用进行安装。
然后将cmake/bin和Qt/tools/mingw***/bin所在的路径添加到path环境变量中。
2、打开安装的cmake-gui.exe文件,或者直接打开桌面上CMake (cmake-gui)快捷键。点击Browse Source选取protobuf源码的路径下的cmake文件夹,然后新建一个build文件夹,用来存放生成的库,并且通过Browse build来添加,如下所示:
3.接着点击Configure,在下拉选择框中选取MinGW Makefiles
4.继续点击Configure后,可能会出现下面情况,这里直接将BUILD_TESTS一项取消来跳过生成tests
5.重新点击Configure,会看到下方出现Configuring done,再点击Generate,会出现Generating done。而在build文件夹中会出现下面文件。这样就生成了makefile文件
6、在cmd中,用mingw32来编译。编译成功后会在build目录下生成libprotobuf.a、libprotobuf-lite.a、libprotoc.a、protoc.exe这四个文件。
注:等待完成[ 100%]进度后才可以,有的版本可能生成的protoc.exe文件显示“不能找到入口”提示,我们可以直接下载
protoc-3.6.1-win32.zip版本文件,其中解压之后就有“protoc.exe文件”,可以代替使用。
7.由于在使用protobuf时要先构建一个proto文件,然后生成对应的头文件和源文件,才能够使用。所以在build文件中构建protobuild.bat脚本文件,在里面添加如下内容。然后将build文件路径添加到环境变量中。如果想要生成某个proto文件对应的头文件和源文件,可以在cmd进入到proto文件所在目录下,输入protobuild *****.proto来进行生成。
8、调试示例
建立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。
最后运行结果如下:
大功告成!