google/protobuf--VS2015编译、使用

本想用google的libphonenumber这个库来进行电话号相关功能,但是看到需要依赖protobuf,反正都是谷歌出品,那就顺便了解学习一下protobuf。

github地址: https://github.com/google/protobuf

什么是protobuf

Protocol Buffers (a.k.a., protobuf) are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data. You can find protobuf’s documentation on the Google Developers site.

protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

下载带vsprojects的版本 我们需要下载带vsprojects的版本,所以不需要太新的,我们要下载2.6 https://github.com/google/protobuf/releases?after=v3.0.0-alpha-3

下载后解压,就可以看到有一个叫vsprojects的文件夹了。

使用vs2015编译 可以使用vs2010编译的,相对简单一些,但我们使用vs2015.

1打开sln

2编译错误以及解决

错误1: error C2338: is deprecated and will be REMOVED. Please use . You can define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS to acknowledge that you have received this warning.

解决方法: 添加预编译: _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS

错误2: 如果要将多个 CL.EXE 写入同一个 .PDB 文件,请使用 /FS

解决方法: 添加命令行 /FS

错误3: error C3688: 文本后缀“PATH_SEPARATOR”无效;未找到文文本运算符或文本运算符模板“operator “”“”PATH_SEPARATOR”

解决方案:

Run(“protocol_compiler –test_out=tmpdir”“–protopath=tmpdir/a"PATH_SEPARATOR"tmpdir/bfoo.proto”);改为Run(“protocolcompiler–testout=tmpdir ” “–proto_path=tmpdir/a"";""tmpdir/b foo.proto”);

错误4: error C3688: 文本后缀“ETC”无效;未找到文文本运算符或文本运算符模板“operator “”“”ETC” 解决方案: 注释掉整个TEST_F(ParseMessageTest, FieldDefaults)

就是宏定义有问题,在vs2015中,具体什么原因还需要进一步研究!!!!!

使用protobuf 1 在D:\protobuf-2.6.1\examples下新建一个文件,姑且就叫person.proto, 键入内容:

package tutorial;  

message Person {  
  required string name = 1;  
  required int32 age = 2;  
  optional string email = 3;  

}  

然后执行命令:

D:\protobuf-2.6.1\vsprojects\Release>protoc -I=D:\protobuf-2.6.1\examples --cpp_out=D:\protobuf-2.6.1\examples D:\protobuf-2.6.1\examples\person.proto

生成了 person.pb.h和person.pb.cc

2新建一个工程

配置: 附加包含目录,导入这个路径D:\protobuf-2.6.1\src 链接器 的常规,右边的附加库目录,导入这个路径D:\protobuf-2.6.1\vsprojects\Release 讲person.pb.h和person.pb.cc添加到自己的工程中

然后键入测试代码:

#include <iostream>  #include "person.pb.h"  #pragma comment(lib, "libprotobuf.lib")  #pragma comment(lib, "libprotoc.lib")using namespace std;using namespace tutorial;int main()
{
  Person person;

  person.set_name("wangshubo");
  person.set_age(26);
  person.set_email("wangshubo1989@126.com");  cout << person.name() << endl;  cout << person.age() << endl;  cout << person.email() << endl;

  system("pause");  return 0;
}

提示: 如果出现Person无法解析,很有可能是只包含了头文件,没有把.cc实现文件也包含进来。

在新建protobuf文件的时候,用windows自带的记事本就可以了,需要的是ANSI,不可以是Unicode

原文发布于微信公众号 - 程序员的酒和故事(cppdabaojian)

原文发表时间:2016-12-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Laoqi's Linux运维专列

使用YAML 文件创建 Kubernetes Deployment

2315
来自专栏Seebug漏洞平台

Wordpress <= 4.6.1 使用主题文件触发存储型XSS 漏洞分析

Author: p0wd3r (知道创宇404安全实验室) 0x00 漏洞概述 1.漏洞简介 WordPress是一个以PHP和MySQL为平台的自由开源的博客...

2954
来自专栏程序员宝库

从零开始写 PHP 扩展

PHP 是用 C 语言写的。对于每个 PHPer 来说,都有着内心的一种希望写扩展的冲动了吧。然而,缺乏一个很好的切入点。Google 上搜 PHP 扩展开发,...

2727
来自专栏FreeBuf

技术讨论 | Windows 10进程镂空技术(木马免杀)

在Win10 x64环境下替换正常的进程,是一个比较高超的技术。使用该技术,可以内存执行病毒、木马。在文件层面实现免杀。可以把一个木马使用DES加密,放在资源里...

871
来自专栏FreeBuf

Flash XSS检测脚本的简单实现

前言 这里主要是讲如何快速扫描到有问题的flash文件,用于批量,有时候很笨的方法也会有奇效,下面记录一下在实现过程中的一些思路和遇到的一些坑。 ? 第三方插件...

2025
来自专栏ChaMd5安全团队

360春秋杯3道web题的简单分析

360春秋杯3道web题的简单分析 From ChaMd5安全团队核心成员 pcat&香香 where is my cat 这题一开始很坑的,存在着/.git/...

4028
来自专栏小白的技术客栈

两个微型的函数例子

hello小伙伴们大家好,还记得昨天的函数参数的文章吗?你get到了多少呢?实际的工作中并没有那么复杂,一个通用的函数定义形如: def func_name(*...

3235
来自专栏企鹅号快讯

培养这10个习惯,你就离UNIX高手更进一步了

来自:IBM developerWorks 链接:https://www.ibm.com/developerworks/cn/aix/library/au-un...

1836
来自专栏SpringSpace.cn

RHEL 4.7 (64bit) 环境安装 GCC 4.6 测试记录 (更新至gcc-4.6.1)

Red Hat Enterprise Linux AS release 4 (Nahant Update 7)

962
来自专栏肖洒的博客

Java调用Python的错误

因为这篇Java调用Python 之前试过用Java调用Python,到真正用的时候才发现是一个乌龙。

922

扫描关注云+社区