日期:2014-05-16  浏览次数:20920 次

Windows环境下google protobuf入门

我使用的是最新版本的protobuf(protobuf-2.5.0),编程工具使用VS2010。简单介绍下google protobuf:

google protobuf 主要用于通讯,是google出的一个结构化信息传递工具,有着效率高、占存储少的优点,常被用于网络通讯。

Google protobuf主要是针对Linux下的开发,但是为了照顾windows的开发人员,google也给出了相应的方案。

windows下,需要下载两个包protobuf-2.5.0.tar.bz2和protoc-2.5.0-win32.zip

而linux下,只需下载protobuf-2.5.0.tar.bz2即可。

下载链接http://code.google.com/p/protobuf/downloads/list

接下来是对这两个包的在windows环境下的操作:

一、假设两个包都放在G根目录下,直接将两个包解压。在G:\protobuf-2.5.0\vsprojects下有protobuf.sln这个文件,用VS2010打开,得到如下9个解决方案。


可能有些其他教程会说这里的转换会有些小问题出现,但是我执行这一步的时候,没有遇到过,是一步到位的。

二、在Solution ‘protobuf’(9 projects)那右键,点击Build Solution生成我们需要的文件。


三、完成上一步后,在G:\protobuf-2.5.0\vsprojects\Debug下会生成下面.exe文件和.lib文件



现在来使用这些生成的文件。

在G:\protobuf-2.5.0\examples下写一个person.proto文件,代码如下:

package Im;

message helloworld

{

       requiredint32         id=1;

       requiredstring        str=2;

       optionalint32         opt=3;

}

打开dos命令界面(运行->cmd),切换目录到G:\protobuf-2.5.0\vsprojects\Debug下,输入命令行:protoc -I=G:\protobuf-2.5.0\examples--cpp_out=G:\protobuf-2.5.0\examples G:\protobuf-2.5.0\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


到这一步,网上的教程几乎都能执行处结果了,可是偏偏在我这里就执行不了,会报下面的错误。


表示很郁闷,找了半天的google搜索和论坛,都没有找到问题,不过看到某大牛一句话(这是重点)

#include “stdfax.h”这句话必须出现在其他头文件前(原因不知道,大概是VS的一个规则吧),尽管这

样,还是不行呀!!!那个郁闷至极,自己写个简单的工程,慢慢摸索,才发觉,person.pb.cc文件要

加上#include “stdfax.h”哭啊,就没想过生成出的文件还要修改的,那文件的开头明明就

写着“DO NOT EDIT!”


好在,加上之后就可以了。这点是值得安慰的,结果如下:


松了一口气,总算能开始在这个协议上干其他事了。走了这么些弯路,让开接触的学子也借鉴下。。。

接下来要学在linux下使用这个protobuf。



饮水思源:

http://kuaile.in/archives/1214