protoc编译proto文件报错:google/api/annotations.proto导入失败
解决protoc编译时找不到google/protobuf/descriptor.proto和google/api/annotations.proto的问题
问题原因
你遇到的错误根源在于:
google/api/annotations.proto依赖google/protobuf/descriptor.proto,但这两个官方proto文件都不在protoc默认搜索路径内,而你当前的编译命令仅指定了自己的proto/目录作为搜索路径。- 移除
google/api/annotations.proto的导入后编译正常,说明你的自定义proto文件本身无问题,故障完全出在第三方proto文件的路径配置上。
解决方案
1. 获取匹配版本的官方proto文件
需要将google/api/annotations.proto及其依赖的google/protobuf/descriptor.proto等文件添加到protoc可搜索的位置:
- 找到与你的protoc 3.0.0版本兼容的官方proto文件(版本不匹配可能引发新的语法错误),将完整的
google目录(包含api、protobuf子目录)复制到项目的proto/目录下。最终目录结构应类似:项目根目录 ├── proto/ │ ├── google/ │ │ ├── api/ │ │ │ └── annotations.proto │ │ └── protobuf/ │ │ └── descriptor.proto │ └── currency.proto └── pb/
2. 调整编译命令(按需)
如果已将google目录放到proto/下,原编译命令可直接使用——因为-I proto/已让protoc能搜索到proto/google/下的文件。若官方proto文件放在其他目录(比如third_party/googleapis),则需在命令中添加该目录作为额外搜索路径:
protoc -I proto/ -I third_party/googleapis proto/*.proto --go_out=plugins=grpc:pb
3. 验证导入语句正确性
确保currency.proto中的导入语句为:
import "google/api/annotations.proto";
这样protoc就能通过指定的搜索路径找到该文件,同时annotations.proto中对descriptor.proto的导入也能被正确解析。
内容的提问来源于stack exchange,提问作者Saurabh Sharma
相关产品推荐
相关产品推荐

