Protocol Buffers 学习笔记

1、安装
ubuntu下的安装很简单(虽然要安装几个包):
具体参见: https://github.com/google/protobuf/blob/master/src/README.md
从github下载了源码后:
$ sudo apt-get install autoconf automake libtool curl make g++ unzip
$ ./autogen.sh
$ ./configure
$ make
$ make check
$ sudo make install
$ sudo ldconfig # refresh shared library cache.


只编译静态库:
./configure --disable-shared



2、编译
.proto文件编译:
protoc addressbook.proto --cpp_out .  # 用于生成C++头文件和.cc文件
protoc addressbook.proto --python_out . #用于生成python相应的文件

注意: 可以通过 -I 参数更改搜索路径, 所有文件的路径必须为绝对路径,,
比如官方给的例子(除了上面那种所有文件都在当前文件夹的情况):
protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/addressbook.proto

c++文件编译:
下面命令中的pkg-config --cflags --libs protobuf会生成proto buff所需的编译选项(头文件目录,-pthread等)
c++ my_program.cc my_proto.pb.cc `pkg-config --cflags --libs protobuf`


3、教程
python版: https://developers.google.com/protocol-buffers/docs/pythontutorial
   可以print(proto)来看proto实例的内容
C++版: https://developers.google.com/protocol-buffers/docs/cpptutorial
   每个proto类都有一个DebugString()方法,用于返回供人看的内容

完成编译命令:
#只能用g++ 用gcc不行!
echo compile c++ part
protoc addressbook.proto --cpp_out .
g++ writeAddress.cc addressbook.pb.cc -o write.out `pkg-config --cflags --libs protobuf`
g++ readAddress.cc addressbook.pb.cc -o read.out `pkg-config --cflags --libs protobuf`

echo use ./write.out add.txt   to generate address file
echo use ./read.out add.txt   to read address file

echo compile python part
protoc addressbook.proto --python_out .
echo use python writeAddress.py add.txt   to generate address file
echo use python readAddress.py add.txt   to read address file


官方教程中有一些错误,,完整的代码(包含编译用的shell命令)见附件

猜你喜欢

转载自cherishlc.iteye.com/blog/2367689