# Rust 交叉编译到安卓

Original: <https://lifelonglearn.ing/rust-cross-compilation>

Author: [奶爸](https://lifelonglearn.ing/users/3b04650c-8231-499b-8ef0-381fc4d7efb0)

Published: 2021-01-10T14:55:17Z

Updated: 2026-09-27T06:57:43Z

Version: 1

近期公司正在搞一些移动端的东西，然后需要给 Rust 做一下安卓的 binding。是加密相关的一个库，binding 其实不难，只要协同两方的数据格式就好了。难在交叉编译到目标平台，尤其是 rust 做了 C 的binding，然后又要给移动端做 Rust 的 binding。

下面以 编译到 `x86_64-linux-android` 平台作为一个小记录，

首先你需要添加 Rust 的 Android x86\_64 的 target

```shell
rustup target add x86_64-linux-android
```

然后就是尝试交叉编译

```shell
RUSTFLAGS="-L /lib/gmp-android-dist/x86_64/ -lgmp" \
CC_x86_64_linux_android="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android30-clang" \
CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android30-clang" \
cargo build --target x86_64-linux-android --release
```

**​划重点：​**`RUSTFLAGS="-L /lib/gmp-android-dist/x86_64/ -lgmp"` 是你的 Rust 中的 binding 的库，需要指定目标平台编译件的地址。比如我目前 `/lib/gmp-android-dist/x86_64/` 路径里面是 Android x86\_64 平台可以使用的库文件及头文件。

```shell
ls /lib/gmp-android-dist/x86_64/
gmp.h       gmpxx.h     libgmp.so   libgmpxx.so
```

**奶爸总结：** toolchain + 引入 Rust 代码中 binding 的库的构建 = 编译成功
