Unable to build for aarch64 due to getgrgid_r
Attempting to build exa for Android using cargo-ndk
cargo ndk --platform 21 --target aarch64-linux-android install exa
It gets almost finishes, but then spits out:
Compiling exa v0.9.0
Running `rustc --crate-name exa /home/developer/.cargo/registry/src/github.com-1ecc6299db9ec823/exa-0.9.0/src/bin/main.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -C opt-level=3 -C panic=abort -C lto --cfg 'feature="default"' --cfg 'feature="git"' --cfg 'feature="git2"' -C metadata=5f70e5ef62c20d0b -C extra-filename=-5f70e5ef62c20d0b --out-dir /opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps --target aarch64-linux-android -C linker=/opt/android-sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang -L dependency=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps -L dependency=/opt/android-src/rust/aarch64/bin/release/deps --extern ansi_term=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libansi_term-389ef4d559c87be4.rlib --extern datetime=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libdatetime-fde48c15c580431a.rlib --extern env_logger=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libenv_logger-2bc1d697a2ff1d04.rlib --extern exa=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libexa-e2c48030a3f9206a.rlib --extern git2=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libgit2-177a9ed242771eb8.rlib --extern glob=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libglob-87917807a55120bb.rlib --extern lazy_static=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/liblazy_static-83bddb69dec5c451.rlib --extern libc=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/liblibc-54d7f6168372e2c1.rlib --extern locale=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/liblocale-84c2114bf5a96f88.rlib --extern log=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/liblog-379f62f56c3088b1.rlib --extern natord=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libnatord-1923276c114d9ab2.rlib --extern num_cpus=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libnum_cpus-cca71c57d5ec524f.rlib --extern number_prefix=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libnumber_prefix-21dd903e40271da2.rlib --extern scoped_threadpool=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libscoped_threadpool-30649c1601176980.rlib --extern term_grid=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libterm_grid-a0972decaef8ca12.rlib --extern term_size=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libterm_size-5d00b8c49f828653.rlib --extern unicode_width=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libunicode_width-4a3bd5c7a13ccf47.rlib --extern users=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libusers-0c58acd841539818.rlib --extern zoneinfo_compiled=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/libzoneinfo_compiled-bb35e5c82a939439.rlib --cap-lints allow -L native=/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/build/libgit2-sys-7f2d58e30eb8c7d8/out/build`
error: linking with `/opt/android-sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang` failed: exit code: 1
|
= note: "/opt/android-sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-Wl,--allow-multiple-definition" "-L" "/home/developer/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib" "/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/exa-5f70e5ef62c20d0b.exa.63vuv0xk-cgu.3.rcgu.o" "-o" "/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/exa-5f70e5ef62c20d0b" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs" "-L" "/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps" "-L" "/opt/android-src/rust/aarch64/bin/release/deps" "-L" "/opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/build/libgit2-sys-7f2d58e30eb8c7d8/out/build" "-L" "/home/developer/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib" "-Wl,-Bstatic" "/tmp/rustcVYg6Wn/liblibgit2_sys-7f93c4acca109ca8.rlib" "-Wl,--start-group" "/tmp/rustcVYg6Wn/libbacktrace_sys-0cef47a6ea2f6faa.rlib" "-Wl,--end-group" "/home/developer/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libcompiler_builtins-4e815dabfb033b9c.rlib" "-Wl,-Bdynamic" "-lz" "-ldl" "-llog" "-lgcc" "-lc" "-lm"
= note: /opt/android-src/rust/aarch64/bin/aarch64-linux-android/release/deps/exa-5f70e5ef62c20d0b.exa.63vuv0xk-cgu.3.rcgu.o: In function `exa::output::table::Table::display::h6f11ebda1bfac3a4':
exa.63vuv0xk-cgu.3:(.text._ZN3exa6output5table5Table7display17h6f11ebda1bfac3a4E+0x528): undefined reference to `getgrgid_r'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: aborting due to previous error
error: failed to compile `exa v0.9.0`, intermediate artifacts can be found at `/opt/android-src/rust/aarch64/bin`
I think I saw a similar symbol cause problems in 677
Cargo was being run on a Ubuntu 18.04 x86_64 machine (Linux sync-android 5.3.0-62-generic #56-Ubuntu SMP Tue Jun 23 11:20:52 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux)
There’s getgrgid_r in Bionic (Android’s libc) so I’m not sure it’s a problem with exa.
Looking briefly on the web, it seems there’s a lot of steps involved, maybe you’re missing something on your system? Have you tried with cross?
Hey, no, i wasn't aware of that actually. I'll see if I can give it a try. Thanks!
Hey, did you try it? Just curious to know if there’s really something to change on exa’s side for Android support or not
getgrgid_r seems to be added at API level 24. https://cs.android.com/android/platform/superproject/+/master:bionic/docs/status.md
So you should
cargo ndk --platform 24 --target aarch64-linux-android install exa
Now I'm tring to bump up NDK and API version of cross https://github.com/rust-embedded/cross/pull/629. After it, I think exa can be compiled through cross.