参考网址:

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. 项目中Gradle使用总结

    一.配置Gradle使用Maven仓库 项目过程中,我们可能会遇到maven的本地库和gradle使用的maven本地库,不是同一个库.现在总结下怎么配置使得maven和gradle都使用相同的mav ...

  2. C++学习之路——1.linux下环境搭建

    学习之路,可说各有各的看法和方法.对于我来说,完全是兴趣一下子来了,脑壳发热吧.就想有个干净的环境,只想着与程序有关的东西练一练. 目前想学习C++,可是打开VC++6,再安了VS2010.VS201 ...

  3. windows下Bullet 2.82编译安装(Bullet Physics开发环境配置)

    平台:Win7,VS2010 1. Bullet库的组织 下图是Bullet_User_Manual中的截图: 从中可见,Bullet的LinearMath(线性数学模块),其上是BulletColl ...

  4. iOS9 URL Schema 白名单 微信

    近期苹果公司iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装. 受此影响,当你的应用在 ...

  5. 从小工到专家 ——读《Java程序员职场全攻略》有感

    从小工到专家 ——读<Java程序员职场全攻略>有感   <Java程序员职场全攻略>是以故事的形式,向读者介绍Java程序员的职场经验.作者牛开复在北京从事软件开发,已经是一 ...

  6. oracle更新语句merge和update

    update: update语句更新需要根据索引或者数据列遍历所有行 语句举例: update table1  a set column1=(select column from table2 b w ...

  7. JS的字符串处理

    1.字符串包含判断 var a = "qwer"; var b = "q"; if (a.contains(b)) { alert("1") ...

  8. 打算从oschina的博客搬运到cnblog了

    如题,感觉cnblog似乎要更加专业一点,顺便也禁水.提高下文章质量 以后就都是干货了 oschina原址 顺便庆祝一下Windows Live Writer配置成功

  9. Chapter 2: Design the user experience

    Apply the user interface design for a web application 介绍了Css的常用属性和html5的新element,以及Htmlhelper的简单方法,如 ...

  10. 井间数据polarization analysis 相关概念

    1. 垂直分量上记录到的数据,无法记录SH波?这个有待考证,先记录于此~ 两点需要注意:1.层状介质中,P波和深度方向(Z轴)组成入射面;2.SH的定义为垂直于入射面的S波分量. 2.VSP的观测方式 ...