Google Protocol Buffer在windows下的配置

简介

什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:

Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。

安装

系统环境:win7 + vs2015 + Qt5.9
protocol buffer: https://github.com/google/protobuf
cmake : http://www.cmake.org/

1. CMake

ProtoBuf的CMakeLists.txt文件在protobuf、cmake文件夹下
这里写图片描述
如果在cmake的时候,如果勾选protobuf_BUILD_TESTS选项时,一般会出现以上报错,需要安装googletest库。这里我们就不勾选这个选项了

在cmake gui界面中我们还可以看到protobuf_BUILD_SHARED_LIBS的选项,如果勾选,后期将编译生成动态链接库,如果不勾选将会生成静态链接库,下面将详细描述两种方式需要注意的问题:

2. 编译生成动态连接库

勾选protobuf_BUILD_SHARED_LIBS,并Generate生成项目并用vs2015打开,选择debug或release模式,生成相应的动态链接库;
在Qt中调用这些库构建时会出现类似于以下报警内容:

LNK2001 无法解析的外部符号 "class google::protobuf::internal::ExplicitlyConstructed<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > google::protobuf::internal::fixed_address_empty_string" (?fixed_address_empty_string@internal@protobuf@google@@3V?$ExplicitlyConstructed@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@123@A)    Protote 

解决办法:
添加PROTOBUF_USE_DLLS 预处理,即在pro文件中添加

DEFINES += PROTOBUF_USE_DLLS

3. 编译生成静态链接库

勾选protobuf_BUILD_SHARED_LIBS,并Generate生成项目并用vs2015打开,选择debug或release模式,在编译之前需要将项目属性中运行库设置为多线程调试,如图
这里写图片描述
不然会出现以下报警:

libprotobufd.lib(common.obj):-1: error: LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(main.obj 中)

猜你喜欢

转载自blog.csdn.net/yizhou2010/article/details/80610881