Go: x/mobile: gomobile +6d0d39b incompatible with NDK 20.0.x

Created on 21 Oct 2019  ·  9Comments  ·  Source: golang/go

What version of Go are you using (go version)?

$ go version
gomobile version +6d0d39b Wed Oct 2 17:59:09 2019 +0000 (android); androidSDK=/opt/android-sdk/platforms/android-29

Does this issue reproduce with the latest release?

Yes.

What operating system and processor architecture are you using (go env)?

go env Output

$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/arp/.cache/go-build"
GOENV="/home/arp/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/opt/go-packages"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/lib/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build030033936=/tmp/go-build -gno-record-gcc-switches"

What did you do?

gomobile clean
gomobile init

What did you expect to see?

Should not show following error!!

What did you see instead?

gomobile: No compiler for 386 was found in the NDK (tried /opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android16-clang). Make sure your NDK version is >= r19c. Use `sdkmanager --update` to update it.

gomobile bind
gomobile: No compiler for amd64 was found in the NDK (tried /opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang). Make sure your NDK version is >= r19c. Use `sdkmanager --update` to update it.

Android NDK version

Android NDK r20.0.x

NeedsInvestigation mobile

Most helpful comment

For those who are facing the incompatibility problem, here is a temporary hack to use NDK r19.2.x :

1. Install NDK r19.2.x in the side of R20.0.x

2. cd $SDK_FOLDER

3. ln -s ndk/19.2.5345600 ndk-bundle

gomobile init should work with this hack!!

You don't need to install r19 ndk: just run
vadym@ubuntu:~/Android/Sdk$ ln -s ndk/21.2.6472646/ ndk-bundle

Thanks

All 9 comments

For those who are facing the incompatibility problem, here is a temporary hack to use NDK r19.2.x :

  1. Install NDK r19.2.x in the side of R20.0.x
  2. cd $SDK_FOLDER
  3. ln -s ndk/19.2.5345600 ndk-bundle

gomobile init should work with this hack!!

CC @hyangah @steeve

Not sure about that one, sorry. We are running gobind inside bazel, and didn't get any particular issues with r20. I may have read that the layout changed quite a bit though...

Still happens today:

lastshaman@LasTshaMAN:~/my-project$ gomobile init
gomobile: No compiler for arm was found in the NDK (tried /home/lastshaman/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi16-clang). Make sure your NDK version is >= r19c. Use `sdkmanager --update` to update it.

@archanpaul workaround from above helps though.

any updates?

Reproduced for go v 1.14

  1. Android SDK does not use ndk-bundle path but ndk:
    ~/Android/Sdk/ndk
  2. Subpath for toochains is also different:
    ~/Android/Sdk/ndk/21.2.6472646/toolchains/llvm/prebuilt/linux-x86_64/bin

vadym@ubuntu:~/Android/Sdk/ndk/21.2.6472646/toolchains/llvm/prebuilt/linux-x86_64/bin$ ls aarch64-linux-android21-clang armv7a-linux-androideabi23-clang ld.lld aarch64-linux-android21-clang++ armv7a-linux-androideabi23-clang++ lldb-argdumper aarch64-linux-android22-clang armv7a-linux-androideabi24-clang llvm-addr2line aarch64-linux-android22-clang++ armv7a-linux-androideabi24-clang++ llvm-ar aarch64-linux-android23-clang armv7a-linux-androideabi26-clang llvm-as aarch64-linux-android23-clang++ armv7a-linux-androideabi26-clang++ llvm-cfi-verify aarch64-linux-android24-clang armv7a-linux-androideabi27-clang llvm-config aarch64-linux-android24-clang++ armv7a-linux-androideabi27-clang++ llvm-cov aarch64-linux-android26-clang armv7a-linux-androideabi28-clang llvm-dis aarch64-linux-android26-clang++ armv7a-linux-androideabi28-clang++ llvm-lib aarch64-linux-android27-clang armv7a-linux-androideabi29-clang llvm-link aarch64-linux-android27-clang++ armv7a-linux-androideabi29-clang++ llvm-modextract aarch64-linux-android28-clang bisect_driver.py llvm-nm aarch64-linux-android28-clang++ clang llvm-objcopy aarch64-linux-android29-clang clang++ llvm-objdump aarch64-linux-android29-clang++ clang-check llvm-profdata aarch64-linux-android-addr2line clang-cl llvm-ranlib aarch64-linux-android-ar clang-format llvm-readelf aarch64-linux-android-as clang-tidy llvm-readobj aarch64-linux-android-c++filt clang-tidy.real llvm-size aarch64-linux-android-dwp dsymutil llvm-strings aarch64-linux-android-elfedit git-clang-format llvm-strip aarch64-linux-android-gprof i686-linux-android16-clang llvm-symbolizer aarch64-linux-android-ld i686-linux-android16-clang++ sancov aarch64-linux-android-ld.bfd i686-linux-android17-clang sanstats aarch64-linux-android-ld.gold i686-linux-android17-clang++ scan-build aarch64-linux-android-nm i686-linux-android18-clang scan-view aarch64-linux-android-objcopy i686-linux-android18-clang++ x86_64-linux-android21-clang aarch64-linux-android-objdump i686-linux-android19-clang x86_64-linux-android21-clang++ aarch64-linux-android-ranlib i686-linux-android19-clang++ x86_64-linux-android22-clang aarch64-linux-android-readelf i686-linux-android21-clang x86_64-linux-android22-clang++ aarch64-linux-android-size i686-linux-android21-clang++ x86_64-linux-android23-clang aarch64-linux-android-strings i686-linux-android22-clang x86_64-linux-android23-clang++ aarch64-linux-android-strip i686-linux-android22-clang++ x86_64-linux-android24-clang arm-linux-androideabi-addr2line i686-linux-android23-clang x86_64-linux-android24-clang++ arm-linux-androideabi-ar i686-linux-android23-clang++ x86_64-linux-android26-clang arm-linux-androideabi-as i686-linux-android24-clang x86_64-linux-android26-clang++ arm-linux-androideabi-c++filt i686-linux-android24-clang++ x86_64-linux-android27-clang arm-linux-androideabi-dwp i686-linux-android26-clang x86_64-linux-android27-clang++ arm-linux-androideabi-elfedit i686-linux-android26-clang++ x86_64-linux-android28-clang arm-linux-androideabi-gprof i686-linux-android27-clang x86_64-linux-android28-clang++ arm-linux-androideabi-ld i686-linux-android27-clang++ x86_64-linux-android29-clang arm-linux-androideabi-ld.bfd i686-linux-android28-clang x86_64-linux-android29-clang++ arm-linux-androideabi-ld.gold i686-linux-android28-clang++ x86_64-linux-android-addr2line arm-linux-androideabi-nm i686-linux-android29-clang x86_64-linux-android-ar arm-linux-androideabi-objcopy i686-linux-android29-clang++ x86_64-linux-android-as arm-linux-androideabi-objdump i686-linux-android-addr2line x86_64-linux-android-c++filt arm-linux-androideabi-ranlib i686-linux-android-ar x86_64-linux-android-dwp arm-linux-androideabi-readelf i686-linux-android-as x86_64-linux-android-elfedit arm-linux-androideabi-size i686-linux-android-c++filt x86_64-linux-android-gprof arm-linux-androideabi-strings i686-linux-android-dwp x86_64-linux-android-ld arm-linux-androideabi-strip i686-linux-android-elfedit x86_64-linux-android-ld.bfd armv7a-linux-androideabi16-clang i686-linux-android-gprof x86_64-linux-android-ld.gold armv7a-linux-androideabi16-clang++ i686-linux-android-ld x86_64-linux-android-nm armv7a-linux-androideabi17-clang i686-linux-android-ld.bfd x86_64-linux-android-objcopy armv7a-linux-androideabi17-clang++ i686-linux-android-ld.gold x86_64-linux-android-objdump armv7a-linux-androideabi18-clang i686-linux-android-nm x86_64-linux-android-ranlib armv7a-linux-androideabi18-clang++ i686-linux-android-objcopy x86_64-linux-android-readelf armv7a-linux-androideabi19-clang i686-linux-android-objdump x86_64-linux-android-size armv7a-linux-androideabi19-clang++ i686-linux-android-ranlib x86_64-linux-android-strings armv7a-linux-androideabi21-clang i686-linux-android-readelf x86_64-linux-android-strip armv7a-linux-androideabi21-clang++ i686-linux-android-size yasm armv7a-linux-androideabi22-clang i686-linux-android-strings armv7a-linux-androideabi22-clang++ i686-linux-android-strip

For those who are facing the incompatibility problem, here is a temporary hack to use NDK r19.2.x :

1. Install NDK r19.2.x in the side of R20.0.x

2. cd $SDK_FOLDER

3. ln -s ndk/19.2.5345600 ndk-bundle

gomobile init should work with this hack!!

You don't need to install r19 ndk: just run
vadym@ubuntu:~/Android/Sdk$ ln -s ndk/21.2.6472646/ ndk-bundle

Thanks

add the following to your ~/.bashrc:

export ANDROID_HOME=$HOME/Android/Sdk
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/21.3.6528147
export PATH=$PATH:$GOPATH/bin:$ANDROID_HOME/platform-tools/

As I can see, you guys just have to specify the ndk version clearly.

Was this page helpful?
0 / 5 - 0 ratings