使用Bazel 6.0.0构建hello_world cc_grpc_library失败求助
问题解决:Bazel 6.0.0 + bzlmod 构建gRPC C++ Hello World
错误原因
- Bazel 6.0.0移除了
native.bind规则:你使用的gRPC 1.47.0版本的依赖脚本仍在调用该已废弃的规则,导致构建失败。 - bzlmod模式下错误使用WORKSPACE时代的依赖加载方式:在BUILD文件中调用
grpc_deps()和grpc_extra_deps()是旧版WORKSPACE管理依赖的做法,bzlmod通过MODULE.bazel自动处理依赖,无需手动调用这些函数。
解决方案步骤
1. 升级gRPC到适配Bazel 6和bzlmod的版本
选择1.50.0及以上版本的gRPC,这些版本已修复native.bind的兼容问题并支持bzlmod。
2. 修改MODULE.bazel文件
替换原有内容为:
module(name = "helloworld", version = "1.0") # 引入proto规则依赖 bazel_dep(name = "rules_proto", version = "5.3.0-21.7") # 引入适配bzlmod的gRPC版本 bazel_dep(name = "grpc", version = "1.54.0")
3. 修改BUILD文件
移除grpc_deps()和grpc_extra_deps()调用,简化后内容:
load("@rules_proto//proto:defs.bzl", "proto_library") load("@grpc//bazel:cc_grpc_library.bzl", "cc_grpc_library") proto_library( name = "helloworld_proto", srcs = ["helloworld.proto"], ) cc_proto_library( name = "helloworld_cc_proto", deps = [":helloworld_proto"], ) cc_grpc_library( name = "helloworld_cc_grpc", srcs = [":helloworld_proto"], grpc_only = True, deps = [":helloworld_cc_proto"], )
4. 配置.bazelrc(可选但推荐)
添加以下内容确保bzlmod模式开启:
common --enable_bzlmod
5. 验证构建
执行命令:
bazel build :helloworld_cc_grpc
内容的提问来源于stack exchange,提问作者CleanCoder265
相关产品推荐
相关产品推荐

