Skip to content

Rust 交叉编译到安卓

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

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

首先你需要添加 Rust 的 Android x86_64 的 target

rustup target add x86_64-linux-android

然后就是尝试交叉编译

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 平台可以使用的库文件及头文件。

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

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

Comments

Commenting as a guest. A nickname is required; email is optional. Only new comments posted after verifying your email and signing in will appear on your profile. Existing guest comments will not be linked automatically.

Share article

Rust 交叉编译到安卓

Email X

View original ↗