在mac上编译协议缓冲区时出错

时间:2015-11-12 06:43:32

标签: c++ python-3.x protocols protocol-buffers

我正在关注协议缓冲区的教程,并且在编译时我一直遇到不同的错误。我的addressbook.proto文件位于/Users/flexmaster411/protobuffer

protoc -I=/Users/flexmaster411/protobuffer --python_out= /Users/flexmaster411/protobuffer/addressbook.proto /Users/flexmaster411/protobuffer

即使我有语法=" proto3"我仍然会收到以下错误在我的原型文件

[libprotobuf WARNING google/protobuf/compiler/parser.cc:471] No syntax specified for the proto file. Please use 'syntax = "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)

我不确定我是否已正确完成设置的目标文件夹,这是否会导致此问题

syntax = "proto3";

package tutorial;

message Person {
  string name = 1;
  int32 id = 2;        // Unique ID number for this person.
  string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    string number = 1;
    PhoneType type = 2;
  }

  repeated PhoneNumber phones = 4;
}

// Our address book file is just one of these.
message AddressBook {
  repeated Person people = 1;
}

1 个答案:

答案 0 :(得分:1)

看起来你颠倒了参数的顺序。 /Users/flexmaster411/protobuffer是您的输出目录,因此它应显示为--python_out。由于您将其指定为秒,protoc认为您告诉它/Users/flexmaster411/protobuffer输入。因此,它尝试打开目录,然后将其解析为.proto文件。有趣的是,目录上的read()不返回任何数据,protoc解释为完全有效的.proto文件,它根本不会声明任何内容!但它会给你一个警告,因为这个空文件没有任何syntax行。

我认为您打算输入的是:

protoc -I=/Users/flexmaster411/protobuffer --python_out=/Users/flexmaster411/protobuffer /Users/flexmaster411/protobuffer/addressbook.proto