Wie integriere ich C ++ 11 in Android?
Wie integriere ich C ++ 11 in Android?
Antworten:
Es scheint, dass die Hauptantwort hier experimentelle Unterstützung für C ++ 11 beinhaltet, und C ++ 11 ist nicht mehr experimentell.
Wenn Sie die Befehlszeilen-NDK-Unterstützung verwenden (ich verwende IDEA Community Edition 13 für Java), musste ich Folgendes eingeben jni/Application.mk, um C ++ 11-Unterstützung mit API 19 (unter OSX ML) zu erhalten:
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
LOCAL_CPPFLAGS := -stc=c++11zu meinem hat Android.mkauch für mich funktioniert.
Zunächst müssen Sie sicherstellen, dass Ihre Toolchain "Cross GCC" ist. Während es unter meinem Linux die Standardeinstellung war, war es nicht auf meinem MacOSX Lion.
Gehen Sie dazu zu Projekteigenschaften> C / C ++ Build> Tool Chain Editor . " Aktuelle Toolchain " sollte auf " Cross GCC " eingestellt sein. Möglicherweise müssen Sie das Kontrollkästchen " Nur kompatible Toolchains anzeigen" deaktivieren .
Fügen Sie dann eine Option zu LOCAL_CFLAGS in Android.mk hinzu :
LOCAL_CFLAGS := -std=gnu++11
Wir müssen Eclipse nun darüber informieren, wo die entsprechenden neuen Symbole zu finden sind (z. B. "std :: unordered_map"). Gehen Sie zu Rechtsklick auf "jni"> Eigenschaften> C / C ++ Allgemein -> Pfade und Symbole -> Symbole -> GNU C ++ und fügen Sie das folgende Symbol hinzu (indem Sie auf "Hinzufügen ..." klicken):
Name: __GXX_EXPERIMENTAL_CXX0X__
Value:
(dh "Wert" leer lassen)
__cplusplus >= 201103L. STLport fehlt <mutex>, <atomics>usw.
Sie können dies auch in Ihrer build.gradle- Datei festlegen , wenn Sie das Gradle-Experimental-Plugin verwenden :
android.ndk {
moduleName = "hello-android-jni"
stl = "stlport_shared"
cppFlags.add("-std=c++11")
}
pthreadanstelle vonthread
Mit dem neuesten Gradle-Experimental-Plugin 0.8.0-alpha4 fügen Sie Ihrer App / build.gradle Folgendes hinzu :
model {
android {
ndk {
moduleName "native"
CFlags.add("-std=c11") // Enable C11 support
ldLibs.add("log")
}
}
}