我使用的是最新版本的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的更多相关文章

随机推荐

  1. jsp页面el表达式<c:choose> <c:when的用法

    等于 是if else <c:choose> <c:when test="${paginationModel.py_province != ''}"> 如果 ...

  2. HTML 和 XHTML 区别

    1.初级改善 为页面添加正确的DOCTYPE 很多设计师和开发者都不知道什么是DOCTYPE,DOCTYPE有什么用. DOCTYPE是document type的简写.主要用来说明你用的XHTML或 ...

  3. Linux下安装配置maven

    参考博客: http://www.blogjava.net/caojianhua/archive/2011/04/02/347559.html 注意事项: 1.解压目录 我的maven解压目录为: / ...

  4. 使用SQLyog将Mysql中的表导出为Excel

    有时会有这样的需求:将MYSQL数据库中的某个表格导出,存为Excel文件.下面介绍步骤: 1.打开SQLyog,选中要导出的表 2.右键--备份/导出--导出表数据作为... 3.如图选择 Exce ...

  5. NOIP模拟 17.8.15

    NOIP模拟17.8.15 A 债务文件名 输入文件 输出文件 时间限制 空间限制debt.pas/c/cpp debt.in debt.out 1s 128MB[题目描述]小 G 有一群好朋友,他们 ...

  6. 【心有猛虎】react-pxq

    这是一个比较完整的简单的react移动端项目,说起来页面少,其实,构思若是精巧,也并不容易做 先放源码:https://github.com/bailicangdu/react-pxq 接下来我们简单 ...

  7. Valgrind 初次接触

    Valgrind 英文的意思是:堆内存 它有很多小工具,作用各不相同 学习于: http://blog.csdn.net/sduliulun/article/details/7732906 http: ...

  8. 想要快速完成一个Python项目,离不开这些开源库

    链接:https://opensource.com/article/18/9/python-libraries-side-projects 在Python / Django世界中有一句话:我们为语言而 ...

  9. python的数据类型和变量

    数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...

  10. PHPCMS快速建站系列之phpcms v9 模板标签说明整理

    [摘要]本文介绍phpcms v9中模板标签使用说明. {template "content","header"} 调用根目录下phpcms\template\ ...