Piszę kod oparty na ARM NEON dla aplikacji na Androida i zmagałem się z tym, że niektóre flagi kompilatora nie są rozpoznawane. Później zrozumiałem, że wsparcie dla tych flag zostało dodane całkiem niedawno i że moja wersja GCC jest starsza. Robię wszystko w systemie Windows i jestem ograniczony przez to, jakie wersje ma do zaoferowania Cygwin. Oto moje pytanie: zanim przejdę i spróbuję zbudować GCC 4.6.0 na moim komputerze z Windows i sprawię, że Cygwin się podoba, czy zadziała dla mnie, czy też NDK użyje własnej wersji GCC i moje uaktualnienie w ogóle nie wpłynie na to ? Jeśli tak, to czy można powiedzieć, żeby używał innego kompilatora?Który kompilator używa Android NDK?
Odpowiedz
Sam NDK wywołuje niestandardowy kompilator krzyżowy zbudowany na kompilatorze arm-eabi-gcc
. Istnieją przykłady ludzi, którzy tworzą niestandardowe biblioteki narzędziowe za pomocą standardowych implementacji GCC z obsługą zestawów instrukcji ARM, ale to jest poza moją ligą. Większość rzeczy, które czytałem w przeszłości, zawsze omawiałem przy użyciu zestawu narzędzi dołączonego do NDK do kompilowania kodu natywnego.
Następstwo: Większość osób, które skarżyły się i musiały stworzyć własny mechanizm narzędziowy, to ludzie, którzy byli zdenerwowani (rzekomo) podrzędnym wsparciem dla języka C++ kompilatora NDK toolchain. Nie mogę z tym porozmawiać, ponieważ niektóre artykuły były starsze, a Android zmienia się tak szybko. To także nie była opinia, która zdaje się pojawiać zbyt często.
chodzi NDK R8d może być modyfikowany na 2 sposoby (patrz Andriod ndk)
- Na NdK-konstrukcji, eksport NDK_TOOLCHAIN_VERSION = 4,7 zmienna lub dodać je do Application.mk.
- Dla standalone buduje, dodać --toolchain = opcję make-standalone-toolchain.sh
--toolchain=arm-linux-androideabi-4.7
domyślny kompilator jest w NDK/build/core/setup-toolchain.mk (patrz NDK_TOOLCHAIN i NDK_TOOLCHAIN_VERSION)
GCC jest zastąpiona brzękiem jak z NDK 11 (marzec 2016)
wymienione na oficjalnej historii Weryfikacja: https://developer.android.com/ndk/downloads/revision_history.html
Jak przełączać się między kompilatory proszony jest pod adresem:
- How to switch between gcc and clang in Android NDK Revision 11?
- Latest C++11 features with Android NDK
I można go łatwo sprawdzić z:
enum CONSTEXPR {N = 256};
char s[N];
#ifdef __clang__
snprintf(s, N, "%s", "clang" __clang_version__);
#else
# ifdef __GNUC__
snprintf(s, N, "%s %d.%d.%d", "gcc", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
# endif
#endif
następnie wystarczy zalogować s
lub zwrotu to do TextView
.
Prawdopodobnie jest to zwykły GCC w standardzie bagien, ale zbudowany z poprawnym zestawem opcji. Teoretycznie, na wyjściu 'gcc -v' powinien pojawić się wiersz' Configured with: ... 'pokazujący, w jaki sposób zbudowano GCC. Zamień 'gcc' na zgodny' some-prefix-gcc' w jakimś katalogu 'bin' pakietu NDK. – rubenvb
@rubenvb Najprawdopodobniej. Ale ponieważ nie mogę mówić w Google, nie mogę tego powiedzieć z żadnym poziomem zaufania. –
Dzięki, ma sens. – Phonon