当前位置: 首页 > 知识库问答 >
问题:

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

阚英武
2023-03-14

我按照协议缓冲区的教程,我在编译时不断遇到不同的错误。我的addressbook.proto文件在/用户/flexmaster 411/原型缓冲区

protoc-I=/Users/flexmaster411/protobuffer-python\u out=/Users/flexmaster411/protobuffer/addressbook。proto/Users/flexmaster411/protobuffer

即使我的原始文件上有synox="原型3",我还是会收到以下错误

[libprotobuf WARNING google/protobuf/compiler/parser.cc:471]没有为proto文件指定语法。请使用“syntax=“proto2”;”或“syntax=“proto3”;”指定语法版本。(默认为proto2语法。)

不确定我是否正确设置了导致此问题的目标文件夹,或者没有得到任何帮助

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个答案

米景辉
2023-03-14

看起来您颠倒了参数的顺序/Users/flexmaster411/protobuffer是您的输出目录,因此它应该与python\u out一起出现。由于您是第二次指定它的,protoc认为您告诉它,/Users/flexmaster411/protobuffer是一个输入。因此,它试图打开一个目录,然后将其解析为<代码>。proto文件。有趣的是,目录上的read()没有返回任何数据,而protoc将其解释为完全有效的。proto文件根本没有声明任何内容!但它会给您一个警告,因为这个空文件没有任何语法行。

我想你打字的意思是:

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

 类似资料:
  • 问题内容: 我grep其他主题,但他们没有帮助我=(。在我的工作服务器上,我没有sudo特权,因此我使用 ./configure –prefix = / home /用户名/本地 然后,我用“ person”示例创建源文件,并使用protoc成功地对其进行编译。 我没有pkg-info =(。我尝试用 g ++ -I / home /用户名/本地/ include -L / home /用户名/本

  • 我搜索其他主题,但它们对我没有帮助=(。在我的工作服务器上,我没有sudo特权,所以我安装PB时使用 ./配置--prefix=/home/用户名/本地 然后我用“人”例子创建源文件,并用协议成功编译。 我没有pkg信息=(。我尝试用 g-I/home/username/local/include-L/home/username/local/lib-lprotobuf-lpthread main。

  • 我正在学习关于协议缓冲区的google python教程,在编译器出现之前,我已经能够成功地完成所有工作。 https://developers.google.com/protocol-buffers/docs/pythontutorial 本教程内容如下: 现在运行编译器,指定源目录(应用程序的源代码所在的目录–如果不提供值,则使用当前目录)、目标目录(希望生成的代码所在的目录;通常与$SRC\

  • 试图使用Ionic 4中的协议缓冲区进行编码 我已经下载了协议并用它来生成一堆_pb.js文件,每个. proto文件一个。很好。 首先关注原型示例。这是示例代码: 我做了一些更改以匹配我的文件。更改proto文件的名称。但是我的proto文件中没有包名称。所以我只是使用了消息名称。首先这是我的. proto文件的开头: 下面是我修改后的代码: 这似乎不起作用。我的控制台显示: 我相信我已经成功地

  • 问题内容: 我正在使用gSoap将旧式C 系统重构为SOA。我们遇到了一些性能问题(非常大的XML),因此我的领导要我看一下协议缓冲区。我做到了,它看起来非常酷(我们需要C 和Java支持)。但是协议缓冲区是仅用于序列化的解决方案,现在我需要将其发送到Java前端。从C ++和Java角度来看,我应该使用什么来通过HTTP(只是内部网络)发送那些序列化的内容? PS。另一个人试图加速我们的gSoa

  • 我试图安装Caffe库,但我有一个编译问题,由于一个错误的原型版本安装在我的系统。 我在论坛上遵循了许多提议的方法,我认为在这篇帖子中讨论了最类似的问题。 在caffe.pb.h中控件是: 但是在我的系统标头(/usr/include/google/cript buf/stubs/Common. h)中: 命令protoc--version从终端返回libprotoc 3.2.0。 所以我安装了3