web-dev-qa-db-ja.com

Android NDKを使用した最新のC ++ 11機能

Android NDKでC++ 11スレッド機能を使用しようとしていますが、最新のコンパイラを使用する方法がわかりません。

Clang 3.2を使用しており、iOSアプリを構築できます。 Android NDK?

そうでない場合、どのようにgcc 4.8でビルドする必要がありますか?

16
Kimi

NDKリビジョン10にはClang 3.6ツールチェーンがあります。これを使って:

NDK_TOOLCHAIN_VERSION := clang3.6

または利用可能な最新のClangツールチェーンを使用する

NDK_TOOLCHAIN_VERSION := clang
12
Sergey K.

(私はNDKバージョンr9bに対応しています)アプリケーションのすべてのソースコード(および含まれているすべてのモジュール)のC++ 11サポートを有効にするには、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

それ以外の場合、モジュールでのみC++ 11をサポートする場合は、APP_CPPFLAGSを使用する代わりに、この行をAndroid.mkに追加します。

LOCAL_CPPFLAGS += -std=c++11

詳細はこちら: http://adec.altervista.org/blog/ndk_c11_support/

18
Mouze

NDKリビジョン8e には、Clang 3.2コンパイラがバンドルされています。それを使用して、あなたは行ってもいいです。

2
Samveen

Ndkビルドの場合、Application.mkを開き、次の情報を追加します。その中で(r8eを使用している場合):

NDK_TOOLCHAIN_VERSION=4.7

注: NDKリビジョン9を使用している場合は、4.8を使用してください。

1
nomann

まず、使用するツールチェーンを決定するには、「application.mk」を編集し(Android.mkと混同しないでください)、gcc 4.8を挿入します。

NDK_TOOLCHAIN_VERSION := 4.8

または、clangが必要な場合:

NDK_TOOLCHAIN_VERSION := clang

しかし、これはスレッドとは関係ありません。これは、使用するツールチェーンのみを定義します。

スレッドについて、Android NDK:

#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

Android gccのサポートは廃止されました。これで、clangを使用しているはずです。 バージョン11リリースノート をお読みください。以下を指定できます。

NDK_TOOLCHAIN_VERSION=clang

インストールされているNDKに基づいて最新バージョンを使用します。また、これを書いている時点では、最新のNDK(v12)にはAndroid Studio)を介してのみアクセスでき、ダウンロードページやスタンドアロンSDKマネージャーからはアクセスできません。

0
EntangledLoops