如何从Eclipse中的另一个文件夹中的一个文件夹导入protobuf文件?

Tim*_*m B 4 java eclipse protocol-buffers

我有一个现有的eclipse项目,包括谷歌协议缓冲区.我正在尝试.proto在新文件夹中添加新文件,然后将其包含.proto在原始文件夹中.

当我尝试构建这个时,我得到:

..\shared\PanicShared.proto:虚拟路径中不允许使用反斜杠,连续斜杠,"."或".."

如何.proto在eclipse中引用另一个文件夹中的另一个?如果我使用绝对文件路径,那么项目将不可移植.

如果我只导入没有路径的"PanicShared.proto",那么导入行本身不会出错但是在PanicShared.proto中我有:

enum PanicLevel {
    NORMAL = 0;
    etc.
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在另一条消息中使用它时:

import "PanicShared.proto";

message PanicPremium {
  repeated PanicLevel panicPremiumLevels = 11;
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

[protoc] PanicPremium.proto:9:12:"PanicLevel"未定义.

[protoc] [libprotobuf警告google/protobuf/descriptor.cc:5411]警告:>未使用的导入:"PanicPremium.proto"导入未使用的"PanicShared.proto".

Jon*_*ham 6

我通常通过做亲戚包括来解决这个问题.

所以如果这是我的结构:

  project
   +- dir1
      +- file1.proto
   +- dir2
      +- file2.proto
Run Code Online (Sandbox Code Playgroud)

我想file1.proto包括file2.proto我做的:

protoc -I ../dir2 <other args you need> file1.proto
Run Code Online (Sandbox Code Playgroud)

在file1中它会说:

import "file2.proto";
Run Code Online (Sandbox Code Playgroud)

这是我的机器上的一个经过实例的例子:

$ find `pwd` -type f
/tmp/so/shared/PanicShared.proto
/tmp/so/main/Main.proto

$ cat /tmp/so/shared/PanicShared.proto
enum PanicLevel {
    NORMAL = 0;
}
$ cat /tmp/so/main/Main.proto
import "PanicShared.proto";

message PanicPremium {
  repeated PanicLevel panicPremiumLevels = 11;
}

$ cd /tmp/so/shared

$ protoc -I . PanicShared.proto --cpp_out=.

$ g++ PanicShared.pb.cc -c -o PanicShared.pb.o

$ cd /tmp/so/main

$ protoc -I . -I ../shared Main.proto --cpp_out=.

$ g++ Main.pb.cc -c -o Main.pb.o -I ../shared

$ protoc --version
libprotoc 2.5.0

$ cd /tmp/so/

$ find `pwd` -type f
/tmp/so/shared/PanicShared.pb.cc
/tmp/so/shared/PanicShared.proto
/tmp/so/shared/PanicShared.pb.h
/tmp/so/shared/PanicShared.pb.o
/tmp/so/main/Main.pb.o
/tmp/so/main/Main.pb.h
/tmp/so/main/Main.proto
/tmp/so/main/Main.pb.cc
Run Code Online (Sandbox Code Playgroud)


Tim*_*m B 4

实际上有两个问题导致此失败。

第一个是我需要将文件添加到包含路径,然后仅使用文件的非限定名称(即“PanicShared.proto”)。

第二个是,由于某种原因,我需要限定对象的名称以从该文件引用它们。即shared.proto.PanicPremiumLevel不是PanicPremiumLevel