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

如何使用Bazel结合rules_rust构建依赖rust_library的Rust Wasm二进制文件?

使用Bazel + rules_rust构建依赖Rust库的Wasm二进制文件

1. 配置Wasm目标的Rust工具链

在WORKSPACE文件中,确保rules_rust已正确引入,然后注册Wasm专用工具链:

rust_toolchain(
    name = "rust_wasm32",
    target_triple = "wasm32-unknown-unknown",
    # 若需指定rustc或其他工具路径,可在此配置
)

可在.bazelrc中设置Wasm构建的默认参数,避免每次构建重复输入:

# .bazelrc 添加以下内容
build:wasm --copt=--target=wasm32-unknown-unknown
build:wasm --rust_toolchain=@//:rust_wasm32

2. 定义依赖现有Rust库的Wasm二进制目标

在BUILD文件中,用rust_binary规则创建Wasm目标,直接依赖你已配置好的rust_library:

# 已定义好的Rust库示例
rust_library(
    name = "my_rust_lib",
    srcs = glob(["src/lib/**/*.rs"]),
    # 库的其他配置:依赖、特性开关等
)

# Wasm二进制目标
rust_binary(
    name = "my_wasm_bin",
    srcs = ["src/bin/main.rs"],
    deps = [":my_rust_lib"],
    # 指定Wasm目标三元组
    target_triple = "wasm32-unknown-unknown",
    # 可选:根据场景添加编译参数,比如无_std环境、导出符号等
    rustc_flags = [
        "--no-default-features",
        "--features=wasm",
        # 给浏览器使用时,通常需要这两个链接参数
        "-C", "link-arg=--export-all",
        "-C", "link-arg=--no-entry",
    ],
)

3. 执行构建

用.bazelrc中定义的wasm配置执行构建:

bazel build //:my_wasm_bin --config=wasm

若不想修改.bazelrc,也可直接在命令行指定参数:

bazel build //:my_wasm_bin --copt=--target=wasm32-unknown-unknown

4. 常见问题解决

  • Wasm工具链找不到:先检查本地Rust环境是否安装了Wasm目标,执行rustup target add wasm32-unknown-unknown安装即可。
  • 依赖的Rust库编译失败:排查库是否使用了仅支持原生平台的依赖,或是否有针对Wasm的特性开关,调整库的features或依赖项即可。
  • 生成的Wasm无法在浏览器运行:若需与JS交互,可使用rules_rust提供的rust_wasm_bindgen规则生成JS绑定:
load("@rules_rust//rust:wasm_bindgen.bzl", "rust_wasm_bindgen")

rust_wasm_bindgen(
    name = "my_wasm_bindgen",
    dep = ":my_wasm_bin",
    # 可选:指定输出JS/TypeScript绑定文件
    modes = ["js"],
)

构建该目标会生成可直接在JS中调用的绑定文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:07:35