Search code examples
linuxrustandroid-ndkrust-cargo

How do I fix "ld: error: unable to find library -lgcc" when cross-compiling rust to android?


I'm trying to get rust working on android. However, when I try to cross-compile to android I get the following linking error:

$ cargo build --target=arm-linux-androideabi
   Compiling <project> v0.1.0 (<project>)
error: linking with `/opt/android-sdk/ndk/23.0.7599858/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi31-clang` failed: exit status: 1

(very long toolchain command from cargo)

ld: error: unable to find library -lgcc
          clang-12: error: linker command failed with exit code 1 (use -v to see invocation)

I have installed the ndk and changed the linker in .cargo/config to the android clang linker. I also tried the standalone toolchains with the same result. The guide I used was the following: https://mozilla.github.io/firefox-browser-architecture/experiments/2017-09-21-rust-on-android.html

Cross-compilation does work when using crate-type = ["rlib"] instead of crate-type = ["cdylib"], but I need an .so file not an .rlib file.

In case it's relevant, i'm using Manjaro Linux.


Solution

  • UPDATE:

    I found the following pull request: https://github.com/rust-lang/rust/pull/85806 After switching to ndk22 it worked. I havn't tried if the pull request fixes the issue (probably does).