无法使用bazel 6.0.0构建hello_world cc_grpc_library

问题描述 投票:0回答:2

我正在尝试在 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)包装到另一层中,因为从提供的链接上的注释中可以看到它。不管怎样,它都没有构建,但我不记得实际的错误。

protocol-buffers grpc bazel bzlmod
2个回答
0
投票

gRPC 尚不支持 Bazel 模块,因此它可能会中断,但在您的情况下,在 BUILD 文件中调用 grpc_deps() 和 grpc_extra_deps() 函数看起来很奇怪,因为这些函数预计会在 WORKSPACE 文件中调用。如果发现该模块还不能工作,您可能想在没有模块的情况下使用它。请看一下这个例子


0
投票

这已在 bzlmod 中使用较新的 gRPC 版本修复。在你的

MODULE.bazel
中试试这个:

bazel_dep(name = "grpc", version = "1.48.1.bcr.3", repo_name = "com_github_grpc_grpc")
© www.soinside.com 2019 - 2024. All rights reserved.