安装 Protocol Buffers 时出现编译错误
Compilation error when installing Protocol Buffers
一直在尝试安装 Protocol Buffers 编译器和 java 运行时安装,但在编译 java 类 时出现错误。我下载了:
protoc-3.2.0rc2-linux-x86_64.zip(虽然说版本是2.6.1)
protobuf-java-3.2.0rc2.zip
文件结构如下所示:
- 项目/
- protobuf_dir/
- protobuf files/directories 包括 src/ 和 java/
- 源/
- 协议(二进制)
- protoc_dir/(protoc zip 文件中的其他内容)
- java/
- 核心/
- 精简版/
- ...
假设没问题,我输入了:
protoc --java_out=src/main/java -I../src \../src/google/protobuf/descriptor.proto
所以 protoc 似乎工作正常。但是后来我一直收到这样的错误,直到我将它们注释掉(不确定这是否有问题?):
google/protobuf/descriptor.proto:443:3: Expected "required", "optional", or "repeated".
google/protobuf/descriptor.proto:443:12: Expected field name.
google/protobuf/descriptor.proto:541:3: Expected "required", "optional", or "repeated".
google/protobuf/descriptor.proto:541:12: Expected field name.
但是当我尝试编译所有 java 类 时,我总是收到一条错误消息:
Descriptors.java:1175: error: cannot find symbol
return FieldDescriptorProto.Type.forNumber(ordinal() + 1);
关于如何解决问题的任何想法?看不出为什么它不应该编译。尝试查看 Google 的页面,但没有显示任何内容。
虽然我以前从未真正使用过 Github 中的 protobuf 这样的库,但我知道我听起来有点无能,所以这对我来说是全新的!
编辑:大家好,此问题已通过完全相同的文件结构得到解决。我卸载了 protoc2.6.1,设置了我的 $JAVA_HOME 和 $PATH 变量(你也应该存储它们而不是每次都导出它们),(正确地)安装了 maven。
一切顺利!一切都顺利编译。感谢回复!
protoc-3.2.0rc2-linux-x86_64.zip (although it says the version is 2.6.1)
这就是问题所在 -- 您以某种方式使用了 protoc 2.6.1 而不是 3.2.0。这可能是因为 protoc 2.6.1 已经安装在您的系统上,并且不知何故它优先于 3.2.0。如果您查看 descriptor.proto 中的错误,您会注意到它们发生在新的 reserved
关键字上; 2.6.1 不支持。
重要的是使用与Java 运行时间库完全相同版本的protoc,否则生成的代码可能无法正确编译,或者可能编译但未正确运行 .
一直在尝试安装 Protocol Buffers 编译器和 java 运行时安装,但在编译 java 类 时出现错误。我下载了:
protoc-3.2.0rc2-linux-x86_64.zip(虽然说版本是2.6.1)
protobuf-java-3.2.0rc2.zip
文件结构如下所示:
- 项目/
- protobuf_dir/
- protobuf files/directories 包括 src/ 和 java/
- 源/
- 协议(二进制)
- protoc_dir/(protoc zip 文件中的其他内容)
- java/
- 核心/
- 精简版/
- ...
- protobuf_dir/
假设没问题,我输入了:
protoc --java_out=src/main/java -I../src \../src/google/protobuf/descriptor.proto
所以 protoc 似乎工作正常。但是后来我一直收到这样的错误,直到我将它们注释掉(不确定这是否有问题?):
google/protobuf/descriptor.proto:443:3: Expected "required", "optional", or "repeated".
google/protobuf/descriptor.proto:443:12: Expected field name.
google/protobuf/descriptor.proto:541:3: Expected "required", "optional", or "repeated".
google/protobuf/descriptor.proto:541:12: Expected field name.
但是当我尝试编译所有 java 类 时,我总是收到一条错误消息:
Descriptors.java:1175: error: cannot find symbol
return FieldDescriptorProto.Type.forNumber(ordinal() + 1);
关于如何解决问题的任何想法?看不出为什么它不应该编译。尝试查看 Google 的页面,但没有显示任何内容。
虽然我以前从未真正使用过 Github 中的 protobuf 这样的库,但我知道我听起来有点无能,所以这对我来说是全新的!
编辑:大家好,此问题已通过完全相同的文件结构得到解决。我卸载了 protoc2.6.1,设置了我的 $JAVA_HOME 和 $PATH 变量(你也应该存储它们而不是每次都导出它们),(正确地)安装了 maven。
一切顺利!一切都顺利编译。感谢回复!
protoc-3.2.0rc2-linux-x86_64.zip (although it says the version is 2.6.1)
这就是问题所在 -- 您以某种方式使用了 protoc 2.6.1 而不是 3.2.0。这可能是因为 protoc 2.6.1 已经安装在您的系统上,并且不知何故它优先于 3.2.0。如果您查看 descriptor.proto 中的错误,您会注意到它们发生在新的 reserved
关键字上; 2.6.1 不支持。
重要的是使用与Java 运行时间库完全相同版本的protoc,否则生成的代码可能无法正确编译,或者可能编译但未正确运行 .