Jak mogę zintegrować C++ 11 z Androidem?Włącz obsługę C++ 11 na Androidzie
Odpowiedz
Przede wszystkim musisz upewnić się, że twój zestaw narzędzi to "Cross GCC". Chociaż był domyślny w moim Linuksie, nie był na moim MacOSX Lion.
Aby to zrobić, przejdź do: Właściwości projektu> Budowa C/C++> Edytor łańcuchów narzędzi. "Bieżący toolchain" należy ustawić na "Cross GCC". Być może trzeba odznaczyć pole "Wyświetlaj kompatybilne toolchains tylko".
Następnie dodać opcję LOCAL_CFLAGS w Android.mk:
LOCAL_CFLAGS := -std=gnu++11
Teraz musimy poinformować Eclipse o tym, gdzie znaleźć odpowiednie nowe symbole (na przykład "std :: unordered_map"). Idź do prawym przyciskiem myszy na "JNI"> Właściwości> C/C++ Ogólne -> Ścieżki i symbole -> Symbole -> GNU C++, i dodaj następujący symbol (klikając "Dodaj ..."):
Name: __GXX_EXPERIMENTAL_CXX0X__
Value:
(czyli niech „Value” pusty)
@yakk: zwykle wymaga 2 dni na zaliczenie. – moswald
Mam pewne problemy z tym. Używam okien i kompiluję przez cmd. Dodałem LOCAL_CFLAGS: = -D__GXX_EXPERIMENTAL_CXX0X__ -std = gnu ++ 11 w moim pliku make, ale kiedy uruchomię polecenie ndk-build, pojawia się błąd w miejscach, w których zastosowano unordered_map ("unordered_map" nie określa typu). Kod działa w portach Linux i Windows mojego programu. Jakieś pomysły, co może być nie tak? NDK, którego używam, to najnowszy dostępny (pobrany dzisiaj). – SMart
Jeśli masz więcej niż jeden moduł i chcesz włączyć flagę dla wszystkich plików, możesz dodać flagę do zmiennej APP_CPPFLAGS w pliku Application.mk. – hara
wydaje główną odpowiedzi tutaj obejmuje eksperymentalne wsparcie dla C++ 11 i C++ 11 nie jest już eksperymentalna.
Jeśli korzystasz z obsługi NDK z wiersza poleceń (używam IDEA community edition 13 dla rzeczy w Javie), to właśnie to musiałem umieścić w moim jni/Application.mk
, aby uzyskać obsługę C++ 11 z API 19 (w systemie OSX ML):
NDK_TOOLCHAIN_VERSION := 4.8
# APP_STL := stlport_shared --> does not seem to contain C++11 features
APP_STL := gnustl_shared
# Enable c++11 extentions in source code
APP_CPPFLAGS += -std=c++11
powinno to być zaakceptowaną odpowiedzią. – stevebot
Można również ustawić to w build.gradle pliku, jeśli używasz gradle-experimental-plugin:
android.ndk {
moduleName = "hello-android-jni"
stl = "stlport_shared"
cppFlags.add("-std=c++11")
}
To nie działa. Mówi mi, że nie można znaleźć cppFlags. – Seth
Hej, @Seth, wiele rzeczy może pójść nie tak, czy upewniłeś się, że użyłeś poprawnej wersji wtyczki gradle i właściwej wersji samego gradla? To świetna gildia, jeśli jej nie czytałeś. http://tools.android.com/tech-docs/new-build-system/gradle-experimental –
Dzięki. Ale niestety przeczytałem każdy przewodnik tam. lol. Po prostu użyłem 'pthread' zamiast' thread' – Seth
z najnowszymi gradle-experimental-plugin 0.8.0 a4 dodać do app/build.gradle :
model {
android {
ndk {
moduleName "native"
CFlags.add("-std=c11") // Enable C11 support
ldLibs.add("log")
}
}
}
- 1. Włącz obsługę std :: get w klasie
- 2. Czy gcc 4.8.1 ma obsługę C++ 11 do zbierania śmieci?
- 3. Włącz wyjątek C++
- 4. Włącz ZipArchive na localhost
- 5. Zamień BOOST_FOREACH na "czystą" wersję C++ 11?
- 6. Ostrzeżenia niezainicjowanej członków zniknąć na C++ 11
- 7. Oczekiwanie na wątek C++ 11 do uruchomienia
- 8. C++ 11 alternatywa pthread_cond_timedwait
- 9. Mapa mutex C++ 11
- 10. Biblioteka refleksyjna C++ 11
- 11. C++ 11 wydajność krotki
- 12. C++ 11 regex_token_iterator
- 13. Jak zachować obsługę limitu czasu sesji w Androidzie Aplikacja
- 14. C++ 11 liczb losowych
- 15. C++ 11 predefiniowane makro
- 16. C++ 11 Regex Matching
- 17. C++ 11: lambda, currying
- 18. C++ 11: Uniwersalny wykonawca
- 19. C++ 11 Destructor = delete
- 20. zainicjować mapę C++ 11
- 21. Klawisz CLION wyłącza tryb C++ 98 na rzecz C++ 11
- 22. Na stałe włącz mój kod
- 23. C# Włącz kontrolę pochodną w przyborniku
- 24. C++, znajdź nieużywany kod i włącz
- 25. C# na Androidzie: Xamarin or Unity?
- 26. Jak skompilować C++ z obsługą C++ 11 w Mac Terminal
- 27. jak zmienić kompilator gcc na C++ 11 na ubuntu
- 28. Jak włączyć obsługę rozszerzenia C w jRuby?
- 29. dodaj obsługę C++ 0x w cmake
- 30. C++ 11 Inteligentne użycie wskaźnika
Nie ma potrzeby tworzenia nowego pytania, wystarczy odpowiedzieć na oryginalne pytanie. – LittleBobbyTables
Ponieważ pierwotne pytanie dotyczyło "unordered_map", wierzyłem, że byłoby interesujące zadać pytanie o integrację C++ 11 na Androida, ponieważ zajęło mi to trochę czasu i jest nieco inne. Cieszę się, że mogę zagłosować na pytanie na wiki :-). – JonesV
gotcha. Zgadnij, że komuś nie spodobało się pytanie: | – LittleBobbyTables