我正在关注协议缓冲区的教程,并且在编译时我一直遇到不同的错误。我的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;
}
答案 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