我正在遵循有关 Protocol Buffer 的教程,并且在编译时会遇到不同的错误。我的addressbook.proto文件在/Users/flexmaster411/protobuffer
protoc -I=/Users/flexmaster411/protobuffer --python_out= /Users/flexmaster411/protobuffer/addressbook.proto /Users/flexmaster411/protobuffer
即使我的原型(prototype)文件上具有语法=“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;
}

最佳答案

好像您颠倒了参数的顺序。 /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

关于c++ - 在Mac上编译 Protocol Buffer 时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33665699/

10-12 20:48