Где взять кросс компилятор под Android?

Казалось бы, простой вопрос, да только ответа нет...

Готовый вариант я нашёл лишь один - на Github (linux-amd64 хост, android-arm64 цель). Пытался собрать binutils из исходников - как гугла, так и последние на ftp gnu org - бесполезно. GCC тоже не собрался.

Ещё у clang есть параметр --target, который в моём случае не работает:

root@kali-arm64 ~ # cat test.c
#include <unistd.h>

int main() {
    write(1, "It works!\n", 10);
    return 0;
}
root@kali-arm64 ~ # clang --target=aarch64-linux-android print.c
In file included from print.c:1:
In file included from /usr/include/unistd.h:25:
/usr/include/features.h:472:10: fatal error: 'sys/cdefs.h' file not found
#include <sys/cdefs.h>
         ^~~~~~~~~~~~~
1 error generated.

Пытался ещё тупо взять clang с Termux-arm, для компиляции под arm-linux-androideabi:

termux@termux ~ $ wget ....../clang-14-arm.deb
termux@termux ~ $ ar x clang-14-arm.deb
termux@termux ~ $ tar -xJf data.tar.xz
termux@termux ~ $ unset LD_PRELOAD
termux@termux ~ $ cd data/data/com.termux/files/usr/bin
termux@termux ~/data/data/com.termux/files/usr/bin $ ./clang-14
## ему либа libclang не понравилась

Конечно, все же есть спорные варианты для кросс-компиляции в Android. 1ый - использовать musl + static. Однако бинарник получается огромный, да и с линковкой иногда бывают проблемы. 2й - статическая линковка с klibc или dietlibc. Но здесь две проблемы, а именно - та же сложная линковка + C++ этим не соберешь, только C. А хотелось бы нативный бинарник без костыля под названием "статическая линковка"...

UPD: нашёл NDK, скачал. Правда, он под x86 хост. А как под arm64 хост перестроить?

UPD2: нашёл Termux-NDK. Работает только на 64бит Termux хост, но решение рабочее...


Ответы (0 шт):