c++ - 在导入的 .proto 文件中扩展 protobuf.FieldOptions

标签 c++ protocol-buffers

我正在尝试在谷歌 Protocol Buffer 中定义我的自定义字段选项。如果我创建这样一个文件,一切正常:

import "google/protobuf/descriptor.proto";

package tutorial;

extend google.protobuf.FieldOptions {
  optional int32 myopt = 70000;
}

message Persona {
  required string name = 1 [(myopt)=5];
}

但是,如果我尝试将“myopt”定义移动到另一个文件,编译会失败:

myext.proto:

package myext;

import "google/protobuf/descriptor.proto";

extend google.protobuf.FieldOptions {
  optional int32 myopt = 70000;
}

地址簿.proto:

import "google/protobuf/descriptor.proto";
import "myext.proto";

package tutorial;


message Persona {
  required string name = 1 [(myopt)=5];
}

编译:

$ protoc --cpp_out=. -I/usr/include -I. addressbook.proto
addressbook.proto:8:29: Option "(myopt)" unknown.

有什么方法可以在使用它的文件之外的其他文件中定义自定义字段选项吗?如果我想在多个 .proto 文件中使用我的选项,将公共(public)部分移动到公共(public)文件很重要。

最佳答案

因为你有一个包myext

你应该做的

import "myext/myext.proto";

myext.proto 位于myext子目录 中。

在protocol buffer package中表示文件应该驻留的目录(就像在java中一样)

关于c++ - 在导入的 .proto 文件中扩展 protobuf.FieldOptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17126230/

相关文章:

c# - 使用 protobuf CodedInputStream 读取 byte[]

c++ - 如何使用指针从函数传递对象在堆上的地址

c++ - 函数中静态变量的生命周期

c++ - fatal error : avr/io. h:没有那个文件或目录

go - 从 protobuf 消息中获取枚举值

Golang proto 文件管理和导入

java - 为日志格式化 protobuf

c++ - 没有源文件路径的 log4cxx 日志?

c++ - 有没有一种方法可以防止将以前运行的值存储在 txt 文件中(防止覆盖)?

c++ - protobuf "oneof"子 protobuf 对象指针杀死程序