Google protocol buffer的配置和使用(Linux&&Windows)
最近自己的服务器做到序列化这一步了,在网上看了下,序列化的工具有boost 和google的protocol buffer,
protocol buffer的效率和使用程度更高效一些,就自己琢磨下把他加到自己的服务器里。
所以这里我先弄一个小的demo去测试如何使用和配置protocol buffer
首先是windows 平台
windows下protocol buffer 配置:
1 下载protocol buffer, 去google官网或者其他渠道下载protocol buffer包
2 解压zip文件,进入vs文件夹编译protocol buffer,图示如下

3 工程下的几个项目都编译一遍,会生成几个lib

在vs目录下的debug目录里能看到

protoc.exe 和 libprotobuf.lib, libprotobuf-lite.lib , libprotoc.lib这几个lib是新生成的,先放一放,以后会用到。
到此为止,google protocol buffer的配置和库已经生成,我们下一步设计自己的proto文件,并生成对应的pb.h和pb.cc
4编写自己的proto 格式如下
package smart; message test
{
required string name = ;
required int32 age = ;
optional string email = ; }
package 表示声明为包名,package smart;表示包名为smart
message test定义一个消息体,花括号结束不需要分号
括号内是成员变量,成员变量后面的数字默认从1开始,依次递增。 required表示这个字段必须有,
optional表示字段可选,还有一些repeated表示可重复的值域,常用于数组。
总结下:
数据结构体:
message message_name{message_body;}
message_body格式:
例如
required int32 query = 1[defaut=10];
形式为:rule type name = value[other_rule]; 规则:
required表示必须具有该值域;
optional表示可选的值域;
repeated表示可重复的值域(即>=0);
其中requered/optional是常用rule,而repeated则不常用同时因为是历史遗留现使用repeated int32 samples=4[packed=true];形式;
value值:
value值最小为1,是底层编码时使用其中1-15占一位,>15则会占多位;
不同的message中的value值互不干扰,常以1开始计数。
5保存为包名.消息名.proto的形式,我保存为smart.msg.proto
6接下来进行编译这个smart.msg.proto, protobuf提供了protoc命令
protoc --proto_path=(.proto文件路径) --cpp_out=(.cc .java生成文件路径) (.proto文件路径)/?.proto
--proto_path 简化为: -I
其中可根据需要更改:cpp_out选项为java_out/python_out。
举例: protoc -I=./ --cpp_out=./ ./smart.msg.proto
windows环境下打开cmd,进入到protocol buf vs目录里debug文件夹里调用protoc命令
我的proto放在D:\win32projects\protobuftest\ProtoBuf目录,所以如下:

进入D:\win32projects\protobuftest\ProtoBuf下可看到新生成的文件

到目前为止,准备工作都做完了,下一步建立自己的项目,使用这些.h和.cc
7建立vs项目,我命名为protobuftest,在项目目录里建立Include和Lib,Protobuf
文件夹,将protobuff库的src文件夹拷贝到Include里,将libprotobuf.lib,
libprotobuf-lite.lib , libprotoc.lib拷贝到Lib文件里,将smart.msg.proto拷贝到Protobuf中,
将protobuff库的那个debug也拷贝到Protobuf中,因为我想通过写一个批处理文件在该项目
里生成.h和.cc文件。
Lib文件夹:

Include文件夹:

Protobuf文件夹:

bat如下:
cd .\Debug
protoc -I=..\ --cpp_out=..\ ..\smart.msg.proto
pause
8 将ProtoBuf文件夹里的.h和.cc添加到项目里

配置项目属性C/C++ ----> General ---> Additional Include Directories ..\Include\src
Linker--->General ----> Additional Library Directories ..\Lib


顺便把预编译也关了

9项目配置好后写代码:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include "../ProtoBuf/smart.msg.pb.h"
#pragma comment(lib, "libprotobuf.lib")
#pragma comment(lib, "libprotoc.lib") int _tmain(int argc, _TCHAR* argv[])
{
smart::test msg1;
msg1.set_age();
msg1.set_name("nice to meet you!");
std::fstream out("User.pb", std::ios::out | std::ios::binary | std::ios::trunc);
msg1.SerializeToOstream(&out);
out.close(); smart::test msg2;
std::fstream in("User.pb", std::ios::in | std::ios::binary);
if (!msg2.ParseFromIstream(&in)) {
std::cerr << "Failed to parse User.pb." << std::endl;
exit();
} std::cout << msg2.age() << std::endl;
std::cout << msg2.name() << std::endl;
std::cout << msg2.email() << std::endl;
std::cout << "adfdf" <<std::endl; getchar();
return ;
}
测试输出

到此为止windows环境配置和使用google protocol buffer已经解决。下面是Linux环境配置和使用:
1解压编译配置,敲命令就可以了:
unzip protobuf-2.6.1
cd protobuf-2.6.1
./configure --prefix=/usr/local/protobuf-2.6.1
make
make check
make install
2写proto文件和编译,跟上面的相同:

3 连带.cc文件一同编译,生成目标并执行,以后会写成makefile,这只是个测试程序,就简单测试下
记得编译时带上-lpthread 和-lprotobuf

如果运行时提示找不到libprotobuf9.so这个库,可以敲这个命令
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

到此为止就完成了google protobuf的 学习和配置,谢谢关注我的微信公众号:

Google protocol buffer的配置和使用(Linux&&Windows)的更多相关文章
- Google Protocol Buffer 的使用和原理[转]
本文转自: http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构 ...
- Google Protocol Buffer的安装与.proto文件的定义
什么是protocol Buffer呢? Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准. 我理解的就是:它是一种轻便高效的结构 ...
- Google Protocol Buffer 协议
1. Protocol Buffers 简介 Protocol Buffers (ProtocolBuffer/ protobuf )是Google公司开发的一种数据描述语言,类似于XML能够将结构化 ...
- 【Google Protocol Buffer】Google Protocol Buffer
http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol Buffers ...
- 前端后台以及游戏中使用Google Protocol Buffer详解
前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf protoBuf是一种灵活高效的独立于语言平台的结构化数据表示方法,与XML相比,protoBuf更 ...
- Google Protocol Buffer安装编译及使用
近期玩了玩谷歌的Protocol Buffer.以下就简介下 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准.眼下已经正在使用的 ...
- Google Protocol Buffer 的使用和原理(无论对存储还是数据交换,都是个挺有用的东西,有9张图做说明,十分清楚)
感觉Google Protocol Buffer无论对存储还是数据交换,都是个挺有用的东西,这里记录下,以后应该用得着.下文转自: http://www.ibm.com/developerworks/ ...
- (转)Google Protocol Buffer 的使用和原理
转自:https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/index.html 简介 什么是 Google Protocol Buffer? ...
- Google Protocol Buffer 的使用
简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 ...
随机推荐
- 算法笔记(c++)--关于01背包的滚动数组
算法笔记(c++)--关于01背包的滚动数组 关于01背包问题:基本方法我这篇写过了. https://www.cnblogs.com/DJC-BLOG/p/9416799.html 但是这里数组是N ...
- 笔试题——C++字符排序
题目:字符排序 题目介绍:输入一组以空格隔开的字数串,将它们奇数位升序排序,偶数位降序排序,再重新输出成新的字数串. 例: 输入: 4 6 2 3 6 7 8 1 奇数位:4 2 6 8 ——2 4 ...
- [redis] linux下主从篇(2)
一.前言1.为何要主从架构避免单机故障,主服务器挂掉后,还可以手动切换从服务为主服务继续工作,保持缓存数据完整. 2.主从同步的原理步骤从服务器连接主服务器,发送SYNC命令:主服务器接收到SYNC命 ...
- Python 函数内省
函数内省(function introspection) 除了__doc__属性, 函数对象还有很多属性,对于下面的函数,可以使用dir()查看函数具有的属性: def factorial(n): r ...
- 只执行一次的js 函数。
function runOnce(fn, context) { //控制让函数只触发一次 return function () { try { fn.apply(context || this, ar ...
- 王者荣耀交流协会 - 第7次Scrum会议(第三周)
1.例会照片 照片由王超(本人)拍摄,组内成员刘耀泽,高远博,王磊,王玉玲,王超,任思佳,袁玥全部到齐. 2.时间跨度: 2017年11月2日 17:00 — 17:20 ,总计20分钟. 3.地 点 ...
- 软工1816 · BETA 版冲刺前准备
任务博客 组长博客 总的来讲Alpha阶段我们计划中的工作是如期完成的.不过由于这样那样的原因,前后端各个任务完成度不算非常高,距离完成一个真正好用.完美的软件还有所差距. 过去存在的问题 测试工作未 ...
- 软工实践-Alpha 冲刺 (9/10)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 已经解决登录注册等基本功能的界面. 完成非功能的主界面制作 ...
- 福大软工·第十一次作业-Alpha事后诸葛亮
福大软工·第十一次作业-Alpha事后诸葛亮 组长博客链接 本次作业博客链接 项目Postmortem 模板 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描 ...
- HDU 5642 King's Order dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5642 King's Order Accepts: 381 Submissions: 1361 ...