因工作原因接触Proctocol Buffer(protobuf),至于什么是protobuf,为何使用protobuf,我就不赘述了,百度下都是答案。
今天我介绍的是在windows下使用vs进行protobuf开发的环境配置过程及简单示例。
首先给出官方的网址镇楼,各种官方资料在这里都可以找到https://github.com/google/protobuf
接触新技术时,在开始免不了一头雾水,首先概括的给出在windows下使用vs进行Proctocol Buffer开发(C++)的基本步骤
1.下载代码包
2.形成sln文件
3.编译出需要的lib文件和protoc.exe(exe程序可以直接下载得到)
4.编写.proto文件
5.利用protoc.exe文件生成.c和.h文件
6.在工程中添加相关资源(.c和.h文件以及lib库) 完成
还是比较清晰的,只是刚开始可能摸不到门路,不知从何下手。对了,补充一下我的运行环境 windowsx64 + vs2013
从官方下载你需要的protobuf源码包版本,如果你选择2.6.1,那么恭喜你,配置还是相当简单的,如果选择3.0.0,那么也恭喜你,你可以学习使用一下cmake
(其实说实话可能是我懒,不喜欢linux,喜欢使用宇宙最强IDE vs,让vs代替我做,跑题了。。。)
1.形成sln文件
2.6.1版本中,打开文件夹“vsprojects”,里面有个.sln文件,打开就可以了,对,就是这么简单。
3.0.0版本中,没有这个文件夹(可能是忘记了?还是我蠢没找到),不要慌,cmake文件夹下readme中明确的告诉了我们怎么生成这个sln文件。下面我就来翻译一下(其实是我加上我试验结果的)
需要下载Cmake工具(不会的就不要来搞protobuf了。。。哈哈)
打开vs2013 x64本机工具命令提示,在开始菜单里,vs下面的tools里面,我的路径C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts,实在找不到可以参考一下。
安装或者解压你下载的cmake
在我们亲爱的黑框框里(x64本机工具命令提示) 添加cmake环境变量(path\to 是官方文档里的实例路径)
C:\Path\to>set PATH=%PATH%;C:\Program Files (x86)\CMake\bin
cd命令进入你下载源码包的cmake文件夹下,在cmake文件夹中创建新目录build并进入。
C:\Path\to\protobuf\cmake>mkdir build & cd build
C:\Path\to\protobuf\cmake\build>
创建一个release目录,如果成功,黑框框中不提示错误,并且你生成了一坨东西在对应的目录下。
C:\Path\to\protobuf\cmake\build>mkdir release & cd release
C:\Path\to\protobuf\cmake\build\release>cmake -G "NMake Makefiles" ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_INSTALL_PREFIX=../../../../install ^
../..
创建一个debug目录
C:\Path\to\protobuf\cmake\build>mkdir debug & cd debug
C:\Path\to\protobuf\cmake\build\debug>cmake -G "NMake Makefiles" ^
-DCMAKE_BUILD_TYPE=Debug ^
-DCMAKE_INSTALL_PREFIX=../../../../install ^
../..
最关键的一步来啦,生成sln文件
C:\Path\to\protobuf\cmake\build>mkdir solution & cd solution
C:\Path\to\protobuf\cmake\build\solution>cmake -G "Visual Studio 12 2013 Win64" ^
-DCMAKE_INSTALL_PREFIX=../../../../install ^
../..
生成成功之后,就可以双击sln文件,在vs下进行编译了。
在生成过程中,悲催的我因为电脑环境的原因发生了找不到kernel32.lib的问题导致生成失败,搞了半天弄不好,最后通过打开vs安装程序,点击修复解决。
你看是不就生成啦!
之后用vs打开该工程,编译,你看是不生成里多了东西,其中就有protoc.exe和libprotobuf.lib和libprotoc.lib文件,这个就是我们需要的
利用protoc.exe运行意下命令生成.c和.h文件
protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/xxx.proto
前提是你要有一个xxx.proto文件,至于这个文件怎么写,请看链接
http://www.cnblogs.com/dkblog/archive/2012/03/27/2419010.html
2.创建C++控制台测试工程
好了,到这一步说明你手上有滚烫烫的.cc和.h文件,以及libprotobuf.lib和libprotoc.lib,已经迫不及待的要创建测试工程了,好吧,看你这么饥渴的份上,就满足你创建一个吧。哈哈哈哈(I是精神病,你们见谅)
创建一个控制台工程,c++的,添加.cc 和.h文件,include .h文件,编译,发现出错
error c1010,是否忘记添加#inlcude"stdfx.h"
生成的.cc文件中第一行就说请勿修改,但是我们就是要修改,加上stdafx.h头文件,对,就是这么任性,你有源码你怕啥!
然后添加上述两个.lib文件
点击“配置属性”下“c/c++”的“常规”,在右侧的“附加包含目录”,导入路径protobuf-xxx\src(从github上下载的源码包)。 编译,对,又出错,哪回让你一帆风顺?年轻人吃点苦不是啥坏事。。。。(此处省略10000000字,加痛打作者300回合)
错误是
error c4996 std::Copy_impl。。。。。。。
解决方法:点击“属性”中的“c\c++”下的“预处理器”,在右侧的“预处理器定义”中添加_SCL_SECURE_NO_WARNINGS。
再次点击编译,是不是成功啦?是不是?激动不?
你一定会以为我会给你一个示例工程,不,作者不是一个随便的人,我是不会这样做的,满网都是,我写他干嘛?
其实我还是会给你一个高级一点的实例工程的,下条博客见。。。。(你们知道这是哪个梗吗?)
版权是我所有滴,转载是要告诉我滴(其实你要是转载我是很高兴滴,不过记得说明出处啊)
提问题我是很欢迎滴,我是很喜欢被骚扰滴!
希望对您有帮助!