Где взять кросс компилятор под 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 хост, но решение рабочее...