使用Bazel构建含gRPC的go_proto_library出现未定义符号错误
问题根因
你遇到的编译错误是gRPC代码生成器版本与项目依赖的grpc-go库版本不兼容导致的:
当前生成Go gRPC存根代码的protoc-gen-go-grpc版本输出的是v6版本的存根代码,该版本要求依赖的google.golang.org/grpc库版本≥v1.27.0,低于该版本的grpc-go库不存在grpc.ClientConnInterface接口和grpc.SupportPackageIsVersion6常量,因此触发未定义的编译错误。
修复步骤
- 升级WORKSPACE文件中grpc-go的依赖版本,建议至少升级到v1.36.0及以上的稳定版本,可完全兼容v6及更高版本的gRPC存根代码,参考配置示例:
go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", sum = "h1:fPVVDxY9w++VjTZsYvXWqEf9Rqar/e+9zfxKoXvrWsg=", version = "v1.58.3", )
- 清理Bazel本地缓存避免旧版本依赖残留,执行命令:
bazel clean --expunge - 重新执行原来的构建命令即可完成编译。
补充说明
gazelle自动生成的BUILD文件不存在配置问题,该问题确实出在WORKSPACE的依赖版本对齐上,rules_go官方指引的基础配置未包含高版本gRPC生成器的适配要求,手动指定grpc-go的对应版本依赖即可解决。
内容的提问来源于stack exchange,提问作者Juan Enrique Muñoz Zolotoochin
相关产品推荐
相关产品推荐

