I have the following code in a protocol buffer file(pcfg_lm.proto):
import "../types/language.proto";
package nlp;
message PCFGProto {
required Language lang = 1;
}
And of course there is a proto file exists at ../types/language.proto. However, when I issue the command:
protoc pcfg_lm.proto --cpp_out=/tmp
Here is the error message:
../types/language.proto: File not found.
pcfg_lm.proto: Import "../types/language.proto" was not found or had errors.
pcfg_lm.proto:6:12: "Language" is not defined.
I think there must be some way to specify the file names in the upper level directories, without using the -I flag. But how do I do that?
You can use the --proto_path= directive to specify which directories to search for imports. It can be used multiple times if needed.
The correct --proto_path will depend on how the package is defined in the imported file (language.proto).
If the imported file (language.proto) contains package types;
specify --proto_path=Parent directory and change the import to
import "types/language.proto";
If the imported file has no package
specify --proto_path=Parent directory/types and change the import to
import "language.proto";