嵌入式开发中使用protobuf

2019-04-10  本文已影响0人  RonZheng2010

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下,则可以使用如下命令:

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文件生成的类,本质上与自定义类并没有什么不同。

上一篇下一篇

猜你喜欢

热点阅读