Google Protocol Buffers安装、使用二三事

转载须注明出处http://www.codelast.com/

 

先说一句题外话:与Google Protocol Buffers类似的项目还有:源自Facebook的Thrift

 

本文只陈述Linux下的情况。

(1)首先下载得到文件protobuf-2.3.0.tar.gz。

在Linux下,解压,然后请务必仔细看README.txt,文档的一开头就是说明在Unix下安装的注意事项。

文章来源:http://www.codelast.com/

安装过程为:

./configure 
make 
make check 
make install

注意第3步有个比较奇怪的“make check”,顾名思义,它是用来做检查的。如果“make check”失败了,你仍然可以安装,但是有可能Google Protocol Buffers的某些功能在你的系统上不能正常使用。“make check”过程消耗的时间比较长,要耐心等待。在这个过程中,会调用Google Test来进行测试,如果你用 过Google Test的话,就会知道那种全绿色的pass是多么令人赏心悦目。下面就是我在我的RHEL 5上的“make check”结果:

“make install”可能会需要超级用户权限。

默认安装路径是 /usr/local ,如果你要安装在其他路径,很容易,例如你想安装在 /usr ,只需要这样调用configure:

./configure --prefix=/usr

文章来源:http://www.codelast.com/

(2)Protocol Buffers文档有多个,如果你初次接触,可以按这样的顺序阅读其中的几个:Protocol Buffer Basics:C++,Language Guide,C++ Generated Code,……

 

(3)编译Protocol Buffers应用程序时,要使用-lprotobuf链接到其动态库或静态库。

 

(4)刚接触Protocol Buffers的朋友可能会问,Protocol Buffers要如何用在socket通信的通信协议中?可以大概地说一下:你需要根据你的协议编写一个.proto文件,此文件的格式是按Protocol Buffers的要求书写的。然后用Protocol Buffers编译器生成这个文件对应的类文件(包括一个.h文件和一个.cc文件),然后在你的程序中include生成的头文件,当需要发送socket消息的时候,先用这个类的对象的SerializeToString()方法,生成一个字符串,这个字符串也就相当于我们传统意义上的编码过的消息,然后在socket消息的接收方,使用ParseFromString()方法,就可以将消息中包含的数据解析到生成的类的成员变量中,就可以直接取出来用了。整个过程不需要你去考虑编码、解码,就算更改了协议,修改工作也非常方便。有时间的话,我会写一个比较详细的sample呈上来。

文章来源:http://www.codelast.com/

(未完待续)

 

One thought on “Google Protocol Buffers安装、使用二三事

  1. 请问楼主,我在Ubuntu10.04下安装protocol buffer 2.0.1 ./configure成功以后,执行make命令,出现错误如下:
    google/protobuf/stubs/strutil.cc:433: error: 'sprintf' was not declared in this scope
    google/protobuf/stubs/strutil.cc: In function 'char* google::protobuf::DoubleToBuffer(double, char*)':
    google/protobuf/stubs/strutil.cc:982: error: 'snprintf' was not declared in this scope
    google/protobuf/stubs/strutil.cc: In function 'char* google::protobuf::FloatToBuffer(float, char*)':
    google/protobuf/stubs/strutil.cc:1037: error: 'snprintf' was not declared in this scope
    google/protobuf/stubs/strutil.cc: In function 'std::string google::protobuf::LocalizeRadix(const char*, const char*)':
    google/protobuf/stubs/strutil.cc:1071: error: 'sprintf' was not declared in this scope
    make[2]: *** [strutil.lo] 错误 1
    make[2]:正在离开目录 `/home/yzh/program/protobuf-2.0.1/src'
    make[1]: *** [all-recursive] 错误 1
    make[1]:正在离开目录 `/home/yzh/program/protobuf-2.0.1'
    make: *** [all] 错误 2

    是为什么?应该如何解决?

发表评论

电子邮件地址不会被公开。 必填项已用*标注