web-dev-qa-db-fra.com

Activer la prise en charge de C ++ 11 sur Android

Comment intégrer C++ 11 dans Android?

72
JonasVautherin

Tout d'abord, vous devrez vous assurer que votre chaîne d'outils est "Cross GCC". Alors que c'était la valeur par défaut sur mon Linux, ce n'était pas sur mon MacOSX Lion.

Pour ce faire, accédez à Propriétés du projet> Génération C/C++> Éditeur de chaîne d'outils. " Chaîne d'outils actuelle " doit être défini sur " Cross GCC ". Vous devrez peut-être décocher la case " Afficher uniquement les chaînes d'outils compatibles ".

Ensuite, ajoutez une option à LOCAL_CFLAGS dans Android.mk :

LOCAL_CFLAGS := -std=gnu++11

Nous devons maintenant informer Eclipse où trouver les nouveaux symboles correspondants (par exemple "std :: unordered_map"). Allez dans clic droit sur "jni"> Propriétés> C/C++ Général -> Chemins et symboles -> Symboles -> GNU C++, et ajoutez le symbole suivant ( en cliquant sur "Ajouter ..."):

Name: __GXX_EXPERIMENTAL_CXX0X__
Value:

(c'est-à-dire laisser "Value" vide)

36
JonasVautherin

Il semble que la réponse principale ici inclut un support expérimental pour C++ 11, et C++ 11 n'est plus expérimental.

Si vous utilisez le support NDK en ligne de commande (j'utilise IDEA community edition 13 pour le Java stuff)), alors c'est ce que je devais mettre dans mon jni/Application.mk pour obtenir la prise en charge de C++ 11 avec l'API 19 (sous 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

Dérivé de ici et ici .

68
scorpiodawg

Vous pouvez également définir cela dans votre fichier build.gradle si vous utilisez le gradle-experimental-plugin :

Android.ndk {
    moduleName = "hello-Android-jni"
    stl = "stlport_shared"
    cppFlags.add("-std=c++11")
}
7
Yuchen Zhong

Avec la dernière gradle-experimental-plugin 0.8.0-alpha4 ajoutez à votre app/build.gradle :

model {
    Android {
        ndk {
            moduleName "native"
            CFlags.add("-std=c11") // Enable C11 support
            ldLibs.add("log")
        }
    }
}
1