我正在遵循有关 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/