protoc v2.6.1 应该产生 'Expected "required", "optional", or "repeated".'

Should protoc v2.6.1 produce 'Expected "required", "optional", or "repeated".'

使用 Ubuntu 16.04 和 CMake,我正在尝试从 protobuf 文件创建一个共享库。 CMakes protobuf_generate_cpp 正在生成 PROTO_SRCS 和 PROTO_HDRS.

我的系统上没有任何 google/protobuf/*.proto 文件,所以我下载了 3.6.1 并将它们移动到 /usr/local/include。我知道我使用的是 proto2,protoc 是版本 2,3.6.1 中的一些 *.proto 文件是 proto3,但下面的文件(我正在使用的是 syntax="proto2") , 所以我觉得这样应该没问题。

但是,我 运行 遇到以下错误。

 $ protoc --version
libprotoc 2.6.1

[  2%] Running C++ protocol buffer compiler on models.proto
google/protobuf/descriptor.proto:439:3: Expected "required", "optional", or "repeated".
google/protobuf/descriptor.proto:439:12: Expected field name.
google/protobuf/descriptor.proto:497:3: Expected "required", "optional", or "repeated".
google/protobuf/descriptor.proto:497:12: Expected field name.
google/protobuf/descriptor.proto:498:3: Expected "required", "optional", or "repeated".
google/protobuf/descriptor.proto:498:12: Expected field name.
google/protobuf/descriptor.proto:597:3: Expected "required", "optional", or "repeated".
google/protobuf/descriptor.proto:597:12: Expected field name.
google/protobuf/descriptor.proto:620:3: Expected "required", "optional", or "repeated".
google/protobuf/descriptor.proto:620:12: Expected field name.
edk/edk_extensions.proto: Import "google/protobuf/descriptor.proto" was not found or had errors.
edk/edk_extensions.proto:15:8: ".google.protobuf.FieldOptions" is not defined.
edk/edk_extensions.proto:20:8: ".google.protobuf.MessageOptions" is not defined.
models.proto: Import "edk/edk_extensions.proto" was not found or had errors.

有人有想法吗?

descriptor.proto 的最新版本声明 reserved fields - as an example line 439。这是一种向后移植到 proto2 语法的新语法,但旧版本的 protoc 不会理解它(不太稳定)。更新协议,或使用您正在使用的协议附带的 descriptor.proto。