概述
这是 protobuf-c
,它是 Google Protocol Buffers 数据序列化格式的一个 C 实现。它包括 libprotobuf-c
,一个纯 C 库,用于实现 protobuf 编码和解码,以及 protoc-c
,一个代码生成器,它基于原始的 protoc
将 Protocol Buffer .proto
文件转换为 C 描述符代码。protobuf-c
之前包含一个 RPC 实现;该代码已拆分到 protobuf-c-rpc 项目中。
protobuf-c
起初由 Dave Benson 编写,并一直由他维护到版本 0.15,但现在由一个新的团队维护。感谢,Dave!
邮件列表
protobuf-c
的邮件列表托管在 Google Groups 论坛 上。通过向以下邮箱发送电子邮件进行订阅:[email protected]。
构建
protobuf-c
需要安装 C 编译器、C++ 编译器、protobuf 和 pkg-config
。
./configure && make && make install
如果从 git 检出代码进行构建,还需安装 autotools
(autoconf
,automake
,libtool
),并必须通过运行 autogen.sh
脚本来生成构建系统。
./autogen.sh && ./configure && make && make install
文档
请参阅在线Doxygen文档或Wiki以获取详细参考。可以通过以下命令从源树中构建Doxygen文档:
make html
概述
使用protoc
命令从您的.proto
输入文件生成.pb-c.c
和.pb-c.h
输出文件。使用--c_out
选项指示protoc
使用protobuf-c插件。
protoc --c_out=. example.proto
在您的C源代码中包含.pb-c.h
文件。
#include "example.pb-c.h"
将您的C源代码与.pb-c.c
文件一起编译。将以下命令的输出添加到您的编译标志中。
pkg-config --cflags 'libprotobuf-c >= 1.0.0'
链接到libprotobuf-c
支持库。将以下命令的输出添加到您的链接标志中。
pkg-config --libs 'libprotobuf-c >= 1.0.0'
如果使用autotools,可以使用PKG_CHECK_MODULES
宏来检测libprotobuf-c
的存在。将以下行添加到您的configure.ac
文件中
PKG_CHECK_MODULES([PROTOBUF_C], [libprotobuf-c >= 1.0.0])
这将把编译器标志放入PROTOBUF_C_CFLAGS
变量中,把链接器标志放入PROTOBUF_C_LDFLAGS
变量中。关于PKG_CHECK_MODULES
宏的更多信息,请参阅此处。
版本管理
自版本1.0.0起,protobuf-c
遵循语义化版本规范。
注意,自版本1.0.0起,由protoc-c
编译器生成的头文件包含版本保护,以防止由protoc-c
生成的.pb-c.h
文件和libprotobuf-c
支持库提供的公共protobuf-c.h
包含文件之间的版本偏移所导致的兼容性问题。虽然我们将尝试不进行需要经常触发版本保护的更改(如发布新的大版本protobuf-c
),但这不能保证。因此,建议将用于构建系统的源.proto
文件与protoc-c
一起重新编译您的.pb-c.c
和.pb-c.h
文件,以适当的源文件依赖关系跟踪,而不是在项目工件(如仓库和发布归档)中发送可能不与系统上安装的libprotobuf-c
头文件兼容的潜在过时的.pb-c.c
和.pb-c.h
文件。请注意,protoc-c
代码生成器的输出不是独立的,因为一些其他生成C代码的工具(如flex
和bison
)的输出并非如此。
主要API/ABI的变更可能在主要版本发布之间发生,这是定义上的。不推荐在稳定库接口中导出由 protoc-c
生成的代码中的符号,因为这会将 protobuf-c
的ABI嵌入到您库的ABI中。同样,不推荐将生成的 .pb-c.h
文件安装到库API的公共头文件包含路径中,因为这会将您库API的客户端绑定到特定的 libprotobuf-c
版本。
贡献
请将补丁发送到 protobuf-c 邮件列表 或通过在 GitHub 上打开一个拉取请求。
最新发布的 protobuf-c
版本保留在 master
分支上,而 next
分支用于针对下一个版本的提交。请基于 next
分支,而不是 master
分支进行补丁和拉取请求。
所有贡献的版权都归原作者所有,但必须根据 BSD-2-Clause 许可证的条款进行许可。请在其提交消息中添加 Signed-off-by
标题(使用 git commit -s
),以表明您同意在这些条款下许可您的贡献。