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 的库的构建 = 编译成功