You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bazel下使用cc_proto_library、py_proto_library引入Well-Known Types报错如何解决

问题根因

你当前使用的Protobuf主分支已经重构了Bazel构建规则,废弃了旧版根路径下的well-known type目标定义,同时旧版@com_google_protobuf//:protobuf.bzl中的规则和新的目标结构不兼容,导致无法找到any_proto对应的生成目标。


可行解决方案

方案1:使用Bazel原生Proto规则(推荐)

原生规则和Protobuf主分支的新目标结构完全兼容,修改BUILD文件内容如下:

# 无需加载protobuf.bzl中的旧规则,直接使用Bazel原生规则
proto_library(
    name = "container_proto",
    srcs = ["container.proto"],
    visibility = ["//visibility:public"],
    # 替换为正确的any_proto目标路径
    deps = ["@com_google_protobuf//google/protobuf:any_proto"],
)

cc_proto_library(
    name = "container_cc_proto",
    visibility = ["//visibility:public"],
    deps = [":container_proto"],
)

py_proto_library(
    name = "container_py_proto",
    visibility = ["//visibility:public"],
    deps = [":container_proto"],
)

修改后直接执行原有构建命令即可正常编译。


方案2:保留旧规则,修改依赖路径

如果必须使用protobuf.bzl中的旧规则,只需将deps中的依赖替换为对应语言的well-known type目标即可:

load("@com_google_protobuf//:protobuf.bzl", "cc_proto_library")
load("@com_google_protobuf//:protobuf.bzl", "py_proto_library")

cc_proto_library(
    name = "container_cc_proto",
    srcs = ["container.proto"],
    visibility = ["//visibility:public"],
    deps = ["@com_google_protobuf//google/protobuf:any_cc_proto"],
)

py_proto_library(
    name = "container_py_proto",
    srcs = ["container.proto"],
    visibility = ["//visibility:public"],
    deps = ["@com_google_protobuf//google/protobuf:any_py_proto"],
)

内容的提问来源于stack exchange,提问作者falsekeel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:39:03