Я пытался запустить приложение Go на Android 10 и наткнулся на загвоздку. Я почти уверен, что теперь знаю, почему я наткнулся на эту проблему, но не знаю, как ее исправить. Во-первых, с крестом работают простые вещи ...

2
adp162 19 Дек 2020 в 05:22

1 ответ

Лучший ответ

Догадаться! Ну, мой конкретный пример работает, но я не совсем уверен, почему это работает. Ответ пришел в основном от https://github.com/golang/go/issues/20755 и вам необходимо:

  • Создайте автономную версию NDK (комментарий в скрипте Python, который делает это, говорит, что он упаковывает его более удобным способом для использования другими инструментами)
  • Перестройте стандартную библиотеку Go с помощью кросс-компилятора в вашем NDK
  • Создайте свое приложение с помощью кросс-компилятора NDK.

Итак, для моего примера:

$ $(NDKROOT)/build/tools/make_standalone_toolchain.py --arch arm64 --api 24 --install-dir $(HOME)/ndk_standalone
$ CC=$(HOME)/ndk_standalone/bin/clang CXX=$(HOME)/ndk_standalone/bin/clang GOOS=android GOARCH=arm64 go install std
$ CC=$(HOME)/ndk_standalone/bin/clang CXX=$(HOME)/ndk_standalone/bin/clang GOOS=android GOARCH=arm64 CGO_ENABLED=1 go build

И сеть работает!

Я не совсем уверен, почему (или если) clang имеет значение, в отличие от прямого вызова компилятора. Может, я еще с этим поиграюсь. Кроме того, мне все равно пришлось явно активировать CGO при компиляции моего приложения (но не для библиотеки go std), иначе связывание не удалось.

0
adp162 19 Дек 2020 в 23:52