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

使用Bazel结合rules_rust构建Android rust_binary失败求助

解决rules_rust构建Android rust_binary的问题

问题根源

你遇到的错误是因为Bazel尝试用**主机架构(darwin_arm64,即M系列Mac)**去匹配Android NDK的工具链,但NDK工具链是针对Android目标架构的,没有对应主机架构的版本。核心问题是构建命令未明确指定Android目标对应的工具链,且rules_rust可能缺少交叉编译配置。

解决步骤

1. 完善WORKSPACE配置

确保已正确引入rules_rust、rules_android和Android NDK:

配置rules_android与NDK

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

# 引入rules_android
http_archive(
    name = "rules_android",
    urls = ["https://github.com/bazelbuild/rules_android/archive/refs/tags/v0.1.1.tar.gz"],
    sha256 = "6e6e7cff30362d58b2312d306cd8d648c5546e152f917e077744904f778f619d",
)

load("@rules_android//android:repositories.bzl", "android_repositories")
android_repositories()

# 配置Android NDK
android_ndk_repository(
    name = "androidndk",
    api_level = 30, # 匹配你的Android最低版本要求
)

配置rules_rust交叉编译工具链

# 引入rules_rust
http_archive(
    name = "rules_rust",
    sha256 = "c1b00f65f54a4c487d1fcb635e3d7d2a4c6f9b4e48380b30d2f3c7c0a3f9f39d",
    urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.35.0/rules_rust-v0.35.0.tar.gz"],
)

load("@rules_rust//rust:repositories.bzl", "rust_repositories", "rust_toolchain")

# 下载rust预编译工具链
rust_repositories(
    version = "1.75.0", # 选择兼容NDK的rust版本
)

# 配置Android ARM64的rust工具链
rust_toolchain(
    name = "rust_android_arm64",
    target_triple = "aarch64-linux-android",
    rustc = "@rust_toolchains//:aarch64-linux-android/rustc",
    cargo = "@rust_toolchains//:aarch64-linux-android/cargo",
    rust_lib = "@rust_toolchains//:aarch64-linux-android/rust_lib",
    toolchain = "@androidndk//:toolchains/llvm/prebuilt/darwin-x86_64:aarch64-linux-android",
)

2. 调整BUILD文件(可选)

你的现有BUILD文件无需修改,若需指定默认目标平台,可添加:

rust_binary(
    name = "hello",
    srcs = ["src/main.rs"],
    # 可选:默认指定Android ARM64平台
    # platform = "@rules_rust//rust/platforms:aarch64-linux-android",
)

3. 正确执行构建命令

运行以下命令,明确指定目标平台和对应工具链:

bazel build //rust:hello \
  --platforms=@rules_rust//rust/platforms:aarch64-linux-android \
  --extra_toolchains=//:rust_android_arm64 \
  --host_platform=@bazel_tools//platforms:host

或者直接指定NDK的目标工具链(无需自定义rust_toolchain时):

bazel build //rust:hello \
  --platforms=@rules_rust//rust/platforms:aarch64-linux-android \
  --extra_toolchains=@androidndk//:toolchains/llvm/prebuilt/darwin-x86_64:aarch64-linux-android \
  --host_platform=@bazel_tools//platforms:host

关键说明

  • target_triple:Android ARM64对应的rust目标三元组是aarch64-linux-android,其他架构可对应调整(如ARM32是armv7-linux-androideabi)。
  • NDK路径:@androidndk//:toolchains/llvm/prebuilt/darwin-x86_64会自动适配你的Mac架构,Intel和M系列Mac均兼容。
  • 版本兼容:建议使用rust 1.60+搭配NDK 25+,避免版本不匹配导致的编译问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:57:41