Android NDKでC++ 11スレッド機能を使用しようとしていますが、最新のコンパイラを使用する方法がわかりません。
Clang 3.2を使用しており、iOSアプリを構築できます。 Android NDK?
そうでない場合、どのようにgcc 4.8でビルドする必要がありますか?
NDKリビジョン10にはClang 3.6ツールチェーンがあります。これを使って:
NDK_TOOLCHAIN_VERSION := clang3.6
または利用可能な最新のClangツールチェーンを使用する
NDK_TOOLCHAIN_VERSION := clang
(私は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
NDKリビジョン8e には、Clang 3.2コンパイラがバンドルされています。それを使用して、あなたは行ってもいいです。
Ndkビルドの場合、Application.mkを開き、次の情報を追加します。その中で(r8eを使用している場合):
NDK_TOOLCHAIN_VERSION=4.7
注: NDKリビジョン9を使用している場合は、4.8を使用してください。
まず、使用するツールチェーンを決定するには、「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)
}
Android gccのサポートは廃止されました。これで、clangを使用しているはずです。 バージョン11リリースノート をお読みください。以下を指定できます。
NDK_TOOLCHAIN_VERSION=clang
インストールされているNDKに基づいて最新バージョンを使用します。また、これを書いている時点では、最新のNDK(v12)にはAndroid Studio)を介してのみアクセスでき、ダウンロードページやスタンドアロンSDKマネージャーからはアクセスできません。