protobuf

1 What is protocol buffer.

Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structrured data - think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages - Java, C++, or Python.

2 Related project.

Apache Avro VS Thrift, http://www.tbdata.org/archives/1307

Thrift VS Protocol Buffers, http://stuartsierra.com/2008/07/10/thrift-vs-protocol-buffers

Thrift vs Protocol Buffers vs Avro - Biased Comparison – SlideShare  http://www.slideshare.net/IgorAnishchenko/pb-vs-thrift-vs-avro 

Schema evolution in Avro, Protocol Buffers and Thrift

http://www.kleppmann.com/2012/12/05/schema-evolution-in-avro-protocol-buffers-thrift.htm

3 How to install.

If you get the source from github, you need to generate the configure script first:

$ ./autogen.sh

This will download gtest source (which is used for C++ Protocol Buffer unit-tests) to the current directory and run automake, autoconf, etc. to generate the configure script and various template makefiles.

You can skip this step if you are using a release package (which already contains gtest and the configure script).

To build and install the C++ Protocol Buffer runtime and the Protocol Buffer compiler (protoc) execute the following:

$ ./configure
$ make
$ make check
$ make install

If "make check" fails, you can still install, but it is likely that some features of this library will not work correctly on your system. Proceed at your own risk.

"make install" may require superuser privileges.

For advanced usage information on configure and make, see INSTALL.txt.

4 How to use.

Compiling dependent packages

To compile a package that uses Protocol Buffers, you need to pass various flags to your compiler and linker. As of version 2.2.0, Protocol Buffers integrates with pkg-config to manage this. If you have pkg-config installed, then you can invoke it to get a list of flags like so:

pkg-config --cflags protobuf         # print compiler flags
pkg-config --libs protobuf           # print linker flags
pkg-config --cflags --libs protobuf  # print both

For example:

c++ my_program.cc my_proto.pb.cc `pkg-config --cflags --libs protobuf`

Note that packages written prior to the 2.2.0 release of Protocol Buffers may not yet integrate with pkg-config to get flags, and may not pass the correct set of flags to correctly link against libprotobuf. If the package in question uses autoconf, you can often fix the problem by invoking its configure script like:

configure CXXFLAGS="$(pkg-config --cflags protobuf)" \
          LIBS="$(pkg-config --libs protobuf)"

This will force it to use the correct flags.

If you are writing an autoconf-based package that uses Protocol Buffers, you should probably use the PKG_CHECK_MODULES macro in your configure script like:

PKG_CHECK_MODULES([protobuf], [protobuf])

See the pkg-config man page for more info.

If you only want protobuf-lite, substitute "protobuf-lite" in place of "protobuf" in these examples.

The complete documentation for Protocol Buffers is available via the web at:

https://developers.google.com/protocol-buffers/

 

posted @ 2015-04-13 11:07  ruccsbingo  阅读(293)  评论(0编辑  收藏  举报