我正在尝试在 Ubuntu 22.04 上使用 bazel
6.0.0 构建一个 hello_world
cc_grpc_library,但我无法这样做。
源树:
WORKSPACE
MODULE.bazel
BUILD
helloworld.proto
.bazelrc
.bazelversion
我的
WORKSPACE
文件是空的。 WORKSPACE.bzlmod
不存在。
MODULE.bazel
包含:
module(name = "helloworld", version = "1.0")
bazel_dep(name = "grpc", version = "1.47.0", repo_name = "com_github_grpc_grpc")
BUILD
包含:
load("@rules_proto//proto:defs.bzl", "proto_library")
load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps")
load("@com_github_grpc_grpc//bazel:grpc_extra_deps.bzl", "grpc_extra_deps")
load("@com_github_grpc_grpc//bazel:cc_grpc_library.bzl", "cc_grpc_library")
grpc_deps()
grpc_extra_deps()
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"],
)
helloworld.proto
是 gRPC 的 helloworld.proto 的副本
当我输入
bazel build :helloworld_cc_grpc
时,我收到以下错误并且不知道如何解决:
...external/grpc~1.47.0/bazel/grpc_deps.bzl", line 23, column 11, in grpc_bind_deps
native.bind(
Error: no native function or rule 'bind'
Available attributes: aar_import, action_listener, alias, android_binary, android_device, android_device_script_fixture, android_host_service_fixture, android_instrumentation_test, android_library, android_local_test, android_sdk, android_tools_defaults_jar, apple_cc_toolchain, available_xcodes, cc_binary, cc_host_toolchain_alias, cc_import, cc_libc_top_alias, cc_library, cc_proto_library, cc_shared_library, cc_shared_library_permissions, cc_test, cc_toolchain, cc_toolchain_alias, cc_toolchain_suite, config_feature_flag, config_setting, constraint_setting, constraint_value, environment, existing_rule, existing_rules, exports_files, extra_action, fdo_prefetch_hints, fdo_profile, filegroup, genquery, genrule, glob, j2objc_library, java_binary, java_import, java_library, java_lite_proto_library, java_package_configuration, java_plugin, java_plugins_flag_alias, java_proto_library, java_runtime, java_test, java_toolchain, label_flag, label_setting, objc_import, objc_library, package, package_group, package_name, platform, propeller_optimize, proto_lang_toolchain, proto_library, py_binary, py_library, py_runtime, py_test, repository_name, sh_binary, sh_library, sh_test, subpackages, test_suite, toolchain, toolchain_type, xcode_config, xcode_config_alias, xcode_version
bazel version
输出:
Bazelisk version: v1.15.0
Build label: 6.0.0
Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Mon Dec 19 15:52:35 2022 (1671465155)
Build timestamp: 1671465155
Build timestamp as int: 1671465155
我也发现了这个 gRPC github 问题,但我不知道如何处理它。
如何使用 bzlmod 构建 gRPC 的 hello world 示例来管理外部依赖项?
我尝试使用 bazel 的 cc_grpc_library 构建它,但这将实际依赖项(gRPC)包装到另一层中,因为从提供的链接上的注释中可以看到它。不管怎样,它都没有构建,但我不记得实际的错误。
gRPC 尚不支持 Bazel 模块,因此它可能会中断,但在您的情况下,在 BUILD 文件中调用 grpc_deps() 和 grpc_extra_deps() 函数看起来很奇怪,因为这些函数预计会在 WORKSPACE 文件中调用。如果发现该模块还不能工作,您可能想在没有模块的情况下使用它。请看一下这个例子。
这已在 bzlmod 中使用较新的 gRPC 版本修复。在你的
MODULE.bazel
中试试这个:
bazel_dep(name = "grpc", version = "1.48.1.bcr.3", repo_name = "com_github_grpc_grpc")