web-dev-qa-db-fra.com

Dernières fonctionnalités de C++ 11 avec Android NDK

J'essaie d'utiliser les fonctionnalités de threading C++ 11 avec le NDK Android, mais je ne sais pas comment le faire utiliser les derniers compilateurs.

J'ai Clang 3.2 et je peux créer des applications iOS. Je me demande s’il existe un moyen de le faire avec Android NDK?

Sinon, comment dois-je compiler avec gcc 4.8?

16
Kimi

La révision 10 de NDK a la chaîne d’outils Clang 3.6. Utilise le:

NDK_TOOLCHAIN_VERSION := clang3.6

ou utilisez la dernière chaîne d'outils Clang disponible

NDK_TOOLCHAIN_VERSION := clang
12
Sergey K.

(J'adresse la version r9b de NDK) Pour activer la prise en charge de C++ 11 pour tout le code source de l'application (et donc des modules inclus), apportez la modification suivante dans Application.mk:

# use this to select gcc instead of clang
NDK_TOOLCHAIN_VERSION := 4.8
# OR use this to select the latest clang version:
NDK_TOOLCHAIN_VERSION := clang


# then enable c++11 extentions in source code
APP_CPPFLAGS += -std=c++11
# or use APP_CPPFLAGS := -std=gnu++11

Sinon, si vous souhaitez que C++ 11 ne prenne en charge que votre module, ajoutez ces lignes dans votre Android.mk au lieu d'utiliser APP_CPPFLAGS.

LOCAL_CPPFLAGS += -std=c++11

Lisez plus ici: http://adec.altervista.org/blog/ndk_c11_support/

18
Mouze

NDK révision 8e contient le compilateur Clang 3.2. Utilisez-le et vous êtes prêt à partir.

2
Samveen

Pour les versions ndk, ouvrez Application.mk et ajoutez les informations suivantes. en elle (si vous utilisez r8e):

NDK_TOOLCHAIN_VERSION=4.7

Remarque: Veuillez utiliser 4.8 si vous utilisez NDK révision 9. 

1
nomann

Tout d’abord, pour décider quelle chaîne d’outils utiliser, éditez votre "application.mk" (ne confondez pas avec Android.mk) et insérez-le pour gcc 4.8:

NDK_TOOLCHAIN_VERSION := 4.8

ou si vous voulez du bruit:

NDK_TOOLCHAIN_VERSION := clang

Mais cela n'a rien à voir avec les threads. Cela ne définira que la chaîne d'outils à utiliser.

En ce qui concerne les discussions, voici un exemple simple pour le NDK Android:

#include <pthread.h> // <--- IMPORTANT

// This will be used to pass some data to the new thread, modify as required
struct thread_data_arguments
{
    int  value_a
    bool value_b;
};

//---------------------------------

// This function will be executed in the new thread, do not forget to put * at the start of the function name declaration
void *functionRunningInSeparateThread(void *arguments)
{
    struct thread_data_arguments *some_thread_arguments = (struct thread_data_arguments*)arguments;

    if (some_thread_arguments->value_b == true)
    {
        printf("VALUE= %i", some_thread_arguments->value_a);
    }

    // Signal the end of the thread execution
    pthread_exit(0);
}

//---------------------------------

// This is the actual function creating and starting the new thread
void startThread()
{
    // Lets pass some data to the new thread, you can pass anything even large data, 
    // for that you only need to modify thread_data_arguments as required
    struct thread_data_arguments *some_thread_arguments;
    some_thread_arguments = (thread_data_arguments*)malloc(sizeof(*some_thread_arguments));

    some_thread_arguments->value_a = 12345;
    some_thread_arguments->value_b = true;

    // Create and start the new thread
    pthread_create(&native_thread, NULL, functionRunningInSeparateThread, (void*)some_thread_arguments)
}
1
PerracoLabs

Notez que Le support Android gcc est maintenant obsolète . Vous devriez maintenant utiliser Clang. Veuillez lire les notes de version de la version 11 . Vous pouvez spécifier:

NDK_TOOLCHAIN_VERSION=clang

Pour utiliser la dernière version basée sur votre NDK installé. De plus, au moment de la rédaction de ce document, le dernier NDK (v12) est uniquement accessible via Android Studio, et non via la page Téléchargements ou le Gestionnaire de SDK autonome.

0
EntangledLoops