protobuf_1
我使用的是最新版本的protobuf(protobuf-2.6.1),编程工具使用VS2010。简单介绍下google protobuf:
google protobuf 主要用于通讯,是google出的一个结构化信息传递工具,有着效率高、占存储少的优点,常被用于网络通讯。
Google protobuf主要是针对Linux下的开发,但是为了照顾windows的开发人员,google也给出了相应的方案。
windows下,需要下载两个包protobuf-2.6.1.tar.bz2和protobuf-2.6.1-win32.zip
下载链接http://code.google.com/p/protobuf/downloads/list
接下来是对这两个包的在windows环境下的操作:
一、假设两个包都放在G根目录下,直接将两个包解压。在G:\protobuf-2.6.1\vsprojects下有protobuf.sln这个文件,用VS2010打开,得到如下9个解决方案。
可能有些其他教程会说这里的转换会有些小问题出现,但是我执行这一步的时候,没有遇到过,是一步到位的。
二、在Solution ‘protobuf’(9 projects)那右键,点击Build Solution生成我们需要的文件。
三、完成上一步后,在G:\protobuf-2.5.0\vsprojects\Debug下会生成下面.exe文件和.lib文件
现在来使用这些生成的文件。
在G:\protobuf-2.6.1\examples下写一个person.proto文件,代码如下:
package lm;
message helloworld
{
required int32 id=1;
required string str=2;
optional int32 opt=3;
}
打开dos命令界面(运行->cmd),切换目录到G:\protobuf-2.6.1\vsprojects\Debug下,输入命令行:protoc -I=G:\protobuf-2.6.1\examples--cpp_out=G:\protobuf-2.6.1\examples G:\protobuf-2.6.1\examples\person.proto
特别注意这里的空格。该命令的意思是让person.proto文件生成.h和.cc文件,cpp_out表示生成C++代码,cpp_out等号后面第一个路径指生成文件的存放路径,第二个指.proto文件的绝对路径。
新建一个工程,命名为Person_,将生成的person.pb.h和person.pb.cc文件导进工程,
这里需要特别注意一点:光在工程里导入文件是不够的,最好在工程目录下再将其拷贝进去,否则有可能出现下面的错误。将.pd.h和.pd.cc文件拷贝到工程目录下就不会报这样的错误。
现在开始来配置工程使用protobuf的头文件和lib文件的路径
右键工程,打开Properties(属性)
点击ConfigurationProperties(配置属性)下的C/C++General(常规),右边AdditionalInclude Directories(附加包含目录),导入这个路径G:\protobuf-2.5.0\src
再次进入配置属性,点击Linker(链接器)àGeneral(常规),右边的Additional LibraryDirectories(附加库目录),导入这个路径G:\protobuf-2.5.0\vsprojects\Debug
四、接下来编写person.cpp
#include <iostream>
#include <string>
#include "person.pb.h"
using namespace std;
int main()
{
lm::helloworld msg1;
msg1.set_id(100);
msg1.set_str("200");
msg1.set_opt(50);
cout << msg1.id() << endl;
cout << msg1.str() << endl;
cout << msg1.opt() << endl;
cin.get();
return 0;
}
饮水思源:
http://blog.csdn.net/chenkjiang/article/details/12569835
protobuf_1的更多相关文章
随机推荐
- 【JZOJ3623】【SDOI2014】数表(table) 树状数组+离线+莫比乌斯反演
题面 100 \[ Ans=\sum_{i=1}^n\sum_{j=1}^mg(gcd(i,j)) \] 其中, \[ g(d)=\sum_{i|d}i \] 我们注意到\(gcd(i,j)\)最多有 ...
- Leetcode695.Max Area of Island岛屿的最大面积
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被水包围着. 找到给定的二维数组中 ...
- JavaScript--返回顶部方法:锚链接、行内式js写法、外链式、内嵌式
返回网页顶部方法 一.锚链接 simpleDemo: <!DOCTYPE html> <html lang="en"> <head> <m ...
- homework-//2017-12-27 11:11 星期三
//2017-12-27 11:11 星期三 const WEEKMAP = { 0:"sunday", 1:"monday", 2:"tuesday ...
- Directx11教程(61) tessellation学习(3)
原文:Directx11教程(61) tessellation学习(3) 现在我们看看在不同tess factor的情况下,三角形是如何细分的?(这儿三条边和内部tess factor值是 ...
- 用五种不同的布局方式实现“左右300px中间自适应”的效果
float浮动 <section class="layout float"> <style media="screen"> .layou ...
- PHPCMS快速建站系列之添加单页模版
单页模板命名:page_xxx.html 以page_开头 在模版所在目录的config.php中添加配置项 'page_xxx.html' => '单网页', 也可以不在config中配置,不 ...
- 面向视频的全新AI架构 —— 阿里云智能视觉技术全解
我们都知道,AI技术正在以可见的速度被应用于各行各业,然而绝大部分业务场景想应用AI技术,都需要算法工程师根据自身业务的标注数据,来进行单独训练,才能打磨出合适的AI模型.如此一来,如何以最低的门槛和 ...
- python 文本文件的读取
- Gym - 101962B_Color Changing Sofa
题意:将一个沙发放到一个分成好几个色块(一个字母代表一种颜色)的房间里,要求沙发染成跟所在色块一样的颜色,沙发分成(0,1)两种,0可以染成一种颜色,1可以染成一种颜色(换句话说,沙发最多两种颜色), ...