参考网址:

http://my.oschina.net/chenleijava/blog/261263

http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/

http://blog.csdn.net/yi_ya/article/details/40404231

http://blog.csdn.net/yi_ya/article/details/40404059

http://blog.csdn.net/chenkjiang/article/details/12569835

一 准备工具

1 vs2012 update4

2 google protobuf_2.6.1(https://github.com/google/protobuf)

注意:

1 下载google protobuf不要从下载页面上选择 ”download zip” , 个人感觉这个应该是下载当前最新的代码, 而最新的代码可能有bug, 建议从页面上方的 ”release”链接页面选择一个进行下载. 3.0.0-alpha-3及以下的版本与最新的版本编译的时候有些许不同, 下面会一一介绍.

二 编译

1 version <=2.6.1

将protobuf-2.6.1.zip解压缩, 然后在vsprojects文件夹下有一个protobuf.sln文件, 打开它, 由于这个文件是vs2012之前的版本创建的, 所以会有解决方案升级的提示, 按照提示进行操作, 完成后, 编译解决方案的debug版跟release版, 在相应的文件里会生成一些lib跟exe文件,在这里只用得到后面3个文件libprotobuf.lib, libprotoc.lib, protoc.exe(默认编译成静态链接库, 如果想要编译成动态链接库,参见vsprojects目录下的readme.txt文件)

2 最新版本

这个解决方案需要用cmake自己生成.

首先, 下载cmake(http://www.cmake.org/download/), 解压缩, 并把bin目录添加到path环境变量中方便使用.

然后, 按照cmake/README.md里面的提示, 创建解决方案,

$ cd path/to/protobuf/cmake

$ mkdir build

$ cd build

$ cmake -G "Visual Studio 9 2008" ..

注意: 最后一步要根据自己装的vs版本进行设置, 我的应该设置成 “Visual Studio  11 2012”

三 生成自己的message结构文件

在protoc.exe 所在的文件夹内编写一个proto文件, 规则如下

<<Google protobuf proto文件编写规则>>

测试内容如下

package lm;

message helloworld

{

required int32     id = 1;  // ID

required string    str = 2;  // str

optional int32     opt = 3;  //optional field

}

然后在当前目录的cmd窗口下使用命令”protoc -I=./ --cpp_out=./ ./lm.proto” 生成对应的pb.cc, pb.h文件

四 测试程序

1 vs创建一个新工程,

2 在当前项目的属性窗口内设置相关项目

(1)包含目录: 添加protobuf头文件目录(src目录)

(2)库目录: libprotobuf.lib, libprotoc.lib 所在的目录

(3)连接器→输入→附加依赖项: libprotobuf.lib, libprotoc.lib

3 将之前产生的两个文件添加到工程里面

注意: 如果创建解决方案的时候使用了预编译头文件, 需要在pb.cc文件的非注释的第一行添加 #include "stdafx.h"

4 将google/protobuf/repeated_filed.h里面的

std::copy(from, from + array_size, to); 改成

std::copy(from, from + array_size,stdext::checked_array_iterator<Element*>(to,array_size));

因为从vs2012开始, 微软把使用不安全函数的地方标记为err, 之前的版本是warning

5 编写测试代码

int main(int argc, char* argv[])

{

lm::helloworld msg1;

msg1.set_id(101);

msg1.set_str(string("asdfsd"));

msg1.set_opt(4234);

string tempstr = msg1.SerializeAsString();

lm::helloworld msg2;

msg2.ParseFromString(tempstr);

cout<< msg2.id()<<endl;

cout<< msg2.str()<<endl;

cout<< msg2.opt()<<endl;

return 0;

}

6 如果是使用dll方式调用, 要在测试程序里面添加#define PROTOBUF_USE_DLLS

window下编译并使用google protobuf的更多相关文章

  1. 在Window下编译LibGeotiff(含Libtiff)

    核心提示:1.GeoTiff简介 GeoTiff是包含地理信息的一种Tiff格式的文件. 1.GeoTiff简介 GeoTiff是包含地理信息的一种Tiff格式的文件.Libgeotiff就是一个操作 ...

  2. caffe 在window下编译(windows7, cuda8.0,matlab接口编译)

    1. 环境:Windows7,Cuda8.0,显卡GTX1080,Matlab2016a,VS2013 (ps:老板说服务器要装windows系统,没办法,又要折腾一番,在VS下编译好像在cuda8. ...

  3. window下编译jcef

    自行编译jcef过程中遇到了一些问题,现在记录如下. 参考的主要文章是jcef的官方介绍: https://bitbucket.org/chromiumembedded/java-cef/wiki/B ...

  4. window下编译ffmpeg 比较简单

    网上关于编译ffmpeg的帖子很多,我也尝试了很多次,但是很多都过不了,一部分原因是版本问题,还有就是有的路劲没说的太明白导致的,经过一天的摸索,最终编译好了,下面把编译方式写下来,希望对看到帖子的人 ...

  5. window 下编译cef 内核 加入mp3/mp4 支持

    下载 depot_tools 解压,加入到环境变量 进入cmd(管理员)运行 gclient 获取 python和git,svn,设置python环境变量 创建新文件夹 mkdir chromium ...

  6. window下编译ffmpeg

    网上关于编译ffmpeg的帖子很多,我也尝试了很多次,但是很多都过不了,一部分原因是版本问题,还有就是有的路劲没说的太明白导致的,经过一天的摸索,最终编译好了,下面把编译方式写下来,希望对看到帖子的人 ...

  7. google protobuf学习笔记:windows下环境配置

    欢迎转载,转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/45371743 protobuf的使用和原理,请查看:http:/ ...

  8. Window下Latex加速编译方法以及西农毕设论文模板推荐

    近些日子用Latex写了一遍文章,一共有11页,但是在window下编译需要2分多的时间,使用的是xeletex编译器. 经过查找,得到了以下方法: 如果坚持使用windows下的latex,使用以下 ...

  9. [转]linux下编译boost.python

    转自:http://blog.csdn.net/gong_xucheng/article/details/25045407 linux下编译boost.python 最近项目使用c++操作python ...

随机推荐

  1. python sproto支持64位有符号整数

    小伙伴需要64位整数做物品的id,之前python sproto的判断有问题,写篇日志记录一下. 之前有问题的代码是这样的: if (!PyInt_Check(data)) { PyErr_SetOb ...

  2. Eclipse下maven使用嵌入式(Embedded)Neo4j创建Hello World项目

    Eclipse下maven使用嵌入式(Embedded)Neo4j创建Hello World项目 新建一个maven工程,这里不赘述如何新建maven工程. 添加Neo4j jar到你的工程 有两种方 ...

  3. NodeOS操作系统

    导读 我想大多数人听说过 Node.js,但是你听说过 NodeOS 吗?一个用 Node.js 写的操作系统,NodeOS 用 Linux 内核来处理各种底层任务,比如硬件通讯什么的,但是除此之外, ...

  4. LintCode Two Strings Are Anagrams

    1. 把string变为char数组 2. 排序Arrays.sort() public class Solution { /** * @param s: The first string * @pa ...

  5. 【Android Studio快捷键】之代码提示

    接下来说如何设置代码自动提示,如图: 图上内容比较多,我直接按区域划分成6块区域来说吧: 区域1:这个选项是关于提示的时候如何进行匹配,即按照什么条件来进行提示内容的搜索. All:选择这个的话,意思 ...

  6. S3C2440的Linux启动过程分析(一)——SC2440处理器结构

    1.1.     S3C2440处理器结构 S3C2440处理器的结构如下图所示,其核心单元为ARM9TDMI处理器核,主要包括16K的指令Cache和16K的数据Cache,以及分开的指令和数据MM ...

  7. java常用IO流数据流小结

      类名 常用方法 说明 输入流 InputStream int read(); 只能读字节流,虽然返回值是int,但只有低8位起作用. DataInputStream Type readType() ...

  8. springMvc3.0.5搭建全程 (转)

    用了大半年的Spring MVC3.0,用着感觉不错.简单写一个搭建Spring MVC3.0的流程(以Spring3.0.5为列),数据库交互使用spring JDBC Template,附件有项目 ...

  9. 转~~~ DIV+CSS实现三角形提示框

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel= ...

  10. 求第K大数

    1.排序找第K个数 2.快速排序分块  时间复杂度  2呢