【问题标题】:Compilation error when installing Protocol Buffers安装协议缓冲区时出现编译错误
【发布时间】:2017-01-28 14:11:12
【问题描述】:

一直在尝试安装 Protocol Buffers 编译器和 java 运行时安装,但在编译 java 类时出现错误。我下载了:

  • protoc-3.2.0rc2-linux-x86_64.zip(虽然说版本是2.6.1)

  • protobuf-java-3.2.0rc2.zip

文件结构如下:

  • 项目/
    • protobuf_dir/
      • protobuf 文件/目录,包括 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(正确)。

一切都好!一切编译顺利。感谢回复者!

【问题讨论】:

标签: java installation protocol-buffers


【解决方案1】:

protoc-3.2.0rc2-linux-x86_64.zip(虽然它说版本是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版本很重要,否则生成的代码可能无法正确编译,或者可能编译但无法正确运行。

【讨论】:

  • 有道理!关于如何删除 2.6.1 的任何想法?
  • @DanielSoutar 首先取决于您如何安装它。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 2014-05-02
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多