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

Issue

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).

Answered By – StackOverflower

Answer Checked By – Terry (Easybugfix Volunteer)

Leave a Reply

(*) Required, Your email will not be published