Bazel构建C++二进制时报@platforms//os:wasi目标不存在错误
故障根因
报错no such target '@platforms//os:wasi'是版本不匹配导致:你拉取的RE2提交(commit 5723bb8)已经加入WASI平台适配逻辑,依赖@platforms//os:wasi构建目标;但当前Bazel环境拉取的platforms规则集版本过旧,os包的BUILD文件内没有声明wasi目标,直接导致构建分析阶段中断。
修复方案
选任意一种方案即可:
- 方案1:在WORKSPACE文件中优先声明新版platforms依赖,覆盖Bazel自带的旧版本。把下面的规则放在RE2拉取规则之前:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "platforms", sha256 = "8150406605389ececb6da07cbcb509d5637a3ab9a24bc69b1101531367d89d74", # 指向本地存放的platforms 0.0.8版本压缩包即可,无需公网拉取 urls = ["file:///home/yourname/bazel_deps/platforms-0.0.8.tar.gz"], )
只要platforms版本≥0.0.7就已经内置wasi目标,满足版本要求即可,不需要强制用特定来源的包。
- 方案2:更换RE2依赖版本,选用2023年年中之前发布的旧稳定版提交,这类版本还没加入WASI适配逻辑,不需要高版本platforms支持,不用额外调整其他依赖。
- 方案3:如果你本地装的Bazel版本≥6.2.0,先执行
bazel clean --expunge清空本地缓存的旧外部依赖,再重新跑构建命令,Bazel会自动拉取版本匹配的platforms包。
额外避坑
你当前WORKSPACE里给RE2设置的仓库名是大写RE2,不符合Bazel仓库名全小写的惯例,后续引用目标时很容易出现大小写匹配错误,建议改成name = "re2",后续依赖引用统一用@re2//:re2格式。
内容的提问来源于stack exchange,提问作者netskink
相关产品推荐
相关产品推荐

