我使用的是最新版本的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. linux系统级别的计划任务及其扩展anacrontab

    这个是系统设置好了,清理系统垃圾或者是自动执行某些脚本的系统任务,一般我们做了解就行了,不要更改配置文件是/etc/conrtab SHELL:就是运行计划任务的解释器,默认是bash PATH:执行 ...

  2. Shell中字符串、数值的比较

    原文:http://apps.hi.baidu.com/share/detail/31263915 在shell中字符串与数值的比较方法是不同的,要注意区分 整数比较:    -eq       等于 ...

  3. ML面试1000题系列(1-20)

    本文总结ML面试常见的问题集 转载来源:https://blog.csdn.net/v_july_v/article/details/78121924 1.简要介绍SVM 全称是support vec ...

  4. Windows Phpstrom svn 配置

    网上百度找到的解决方案行不通,就是下图两项都不选中.临时是可以的,但是到了第二天,又不行了. 以下是自己瞎弄的,居然可以了. 第一步:安装TortoiseSVN 1.8.* ,注意安装选项要选上com ...

  5. Apache httpd问题汇总

    1.Apache服务器下载到本地解压到路径下:C:\ProgramFiles\Apache 后,启动时报错:serverroot must be a valid directory 解决办法:1.打开 ...

  6. arcgis增大缩放级别

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. xml-apis.jar getTextContent() jar包冲突解决(getTextContent()方法无法找到)

    1.引用包: import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList; 2.方法中应用: ...

  8. 关于父组件通过v-on接收子组件多个参数的一点研究

    写组件的时候遇到一个需求,我需要在子组件向父组件传递信息 this.$emit('myEvent', 信息1, 信息2) 在父组件使用v-on来接收 <my-component @myEvent ...

  9. 2019-11-20-WPF-使用-MyScript-的-IInk-做手写识别

    title author date CreateTime categories WPF 使用 MyScript 的 IInk 做手写识别 lindexi 2019-11-20 08:18:26 +08 ...

  10. Leetcode762.Prime Number of Set Bits in Binary Representation二进制表示中质数个计算置位

    给定两个整数 L 和 R ,找到闭区间 [L, R] 范围内,计算置位位数为质数的整数个数. (注意,计算置位代表二进制表示中1的个数.例如 21 的二进制表示 10101 有 3 个计算置位.还有, ...