Google 协议缓冲区 - protoc-c 和 protoc 之间的二进制兼容性

Posted

技术标签:

【中文标题】Google 协议缓冲区 - protoc-c 和 protoc 之间的二进制兼容性【英文标题】:Google protocol buffers - Binary compatibility between protoc-c and protoc 【发布时间】:2017-03-13 22:38:49 【问题描述】:

我有以 proto2 格式编写并由 protoc-c 编译器编译的 C 代码。我想知道的是该代码是否与“protoc”编译器生成的序列化/反序列化代码二进制兼容(这也恰好理解 protobuf 的第 3 版)?由于某种原因,我无法得到这个问题的明确答案。我想知道的原因是因为版本 3 和版本 2 之间已经存在向后兼容性问题,所以我对 protoc-c 和 protoc 工具包以及它们如何处理版本有点不确定。

谢谢!

【问题讨论】:

【参考方案1】:

是的,这两种实现应该是兼容的——您可以用一种实现序列化消息并用另一种实现成功地解析它们。我没有亲自尝试过 protobuf-c,但根据它的描述,它只是相同协议缓冲区线格式的另一种实现。

您提到了syntax = "proto2"syntax = "proto3" 之间的区别。确实,这些是不同的,如果你想从一个迁移到另一个,你必须小心,但我认为这个问题与你关于 protobuf-c 和 Google 的 protobuf 实现之间兼容性的问题是正交的。

【讨论】:

以上是关于Google 协议缓冲区 - protoc-c 和 protoc 之间的二进制兼容性的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 中使用 MinGW 的 Google 协议缓冲区

Windows 上的 Thrift / Google 协议缓冲区

Google 协议缓冲区交叉编译

C++ 中的 Google 协议缓冲区:从现有结构创建消息

google 的从 c# 到 java 的协议缓冲区 - 协议消息标签的线路类型无效

google.protobuf.message.DecodeError:协议缓冲区中标签错误的接线类型错误