2011-07-06 25 views
19

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

10

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.

+4

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

+0

@rubenvb Najprawdopodobniej. Ale ponieważ nie mogę mówić w Google, nie mogę tego powiedzieć z żadnym poziomem zaufania. –

+0

Dzięki, ma sens. – Phonon

18

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)

6

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:

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.

Powiązane problemy