1. 编译安装protobuf工具
如果Ubuntu中缺省的protobuf工具不符合要求,则需要自己编译protobuf。
如 Ubuntu 14.04缺省安装的是protobuf 2.5.0。
$ sudo apt-get install protobuf-compiler
$ protoc --version
libprotoc 2.5.0
1.1 编译本地protobuf工具
如下以编译protobuf 3.7.1为例。首先编译本地编译工具protoc,protoc用于将.proto文件转换成C++。
$ ../protobuf-3.7.1/configure --prefix=/usr
$ sudo make install
$ whereis protoc
protoc: /usr/bin/protoc /usr/bin/X11/protoc
1.2 编译目标板上的库
如下的命令编译生成protobuf动态库。编译和使用从.proto文件得到的C++文件时,需要引用该库。
$ ../protobuf-3.7.1/configure --host=arm-linux-gnueabi --with-protoc=/usr/bin/protoc \
--disable-static --enable-shared
$ make
2. .proto文件
2.1 书写 .proto 文件
首先我们需要编写一个 proto 文件,定义我们程序中需要处理的结构化数据。在 protobuf 的术语中,结构化数据被称为 Message。proto 文件非常类似 java 或者 C 语言的数据定义。
如下的ProtoDemo.proto是一个例子。
$ cat ProbufDemo.proto
package ProbufDemo;
enum Sex
{
male = 0;
female = 1;
}
message UserInfo
{
required uint32 uid = 1;
optional string nick_name = 2;
required Sex sex = 3;
}
2.2 编译 .proto 文件
写好 proto 文件之后,就可以用protoc将该文件编译成目标语言了,这里生成C++文件。
假设.proto 文件放在 $SRC_DIR 下面,把生成的文件放在目录$DST_DIR下,则可以使用如下命令:
- -I 指定文件搜索目录
- --cpp_out指定生成的C++文件的存放位置
protoc -I=$SRC_DIR --cpp_out=$DST_DIR probufDemo.proto
比如前面的例子,命令如下:
protoc -I=. --cpp_out=src probufDemo.proto
将在src目录下生成两个文件:ProbufDemo.pb.h 和ProbufDemo.pb.cc,分别是C++ 类的头文件和实现文件。
2.3 使用C++类
除了依赖protobuf的库,.proto文件生成的类,本质上与自定义类并没有什么不同。
网友评论