Android NDKでC++ 11スレッディング機能を使用しようとしていますが、最新のコンパイラを使用する方法がわかりません。Androidで最新のC++ 11機能NDK
私はClang 3.2を持っており、iOSアプリケーションを構築できます。 Android NDKでそれを行う方法があるのだろうか?
もしそうでなければ、gcc 4.8を使ってどのようにビルドするのですか?
Android NDKでC++ 11スレッディング機能を使用しようとしていますが、最新のコンパイラを使用する方法がわかりません。Androidで最新のC++ 11機能NDK
私はClang 3.2を持っており、iOSアプリケーションを構築できます。 Android NDKでそれを行う方法があるのだろうか?
もしそうでなければ、gcc 4.8を使ってどのようにビルドするのですか?
NDKリビジョン10を使用している場合には4.8を使用してください:それで(r8eを使用している場合):
NDK_TOOLCHAIN_VERSION=4.7
注意。それを使用します。
NDK_TOOLCHAIN_VERSION := clang3.6
または
NDK_TOOLCHAIN_VERSION := clang
気まぐれな、 'clang3.6'は私のために3.8を使用しています(現在は5.1.1で最新のもの、'#ifdef'でチェックされています)。そして 'clang3.8'はエラーです。 –
NDK revision 8eには、Clang 3.2コンパイラがバンドルされています。それを使用して、あなたは良いです。
このようにコンパイラを使用できますが、スレッド化を使用するには何か別の方法があります(私はAPP_STL:= gnustl_staticを使用しています)エラーが発生しました:名前空間 'std'に 'thread'という名前のメンバはありません。あなたは「fread」を意味しましたか? – Kimi
@Kimi '$ NDK/docs/STABLE-APIS.html'にあるNDKのドキュメントには、次のように書かれています:' Android Cライブラリにはpthread(
まず、(android.mkと混同しないでください)あなたの "application.mk" を編集し、使用するツールチェーンを決めるとgcc 4.8のために挿入するには:
NDK_TOOLCHAIN_VERSION := 4.8
またはあなたが打ち鳴らすしたい場合は:
NDK_TOOLCHAIN_VERSION := clang
しかし、これはスレッドとは関係ありません。これは、使用するツールチェーンのみを定義します。ここでは、スレッド、およそ今
は、Android NDKのための簡単な例です: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)
}
、ビルドをオープンApplication.mkと、以下の情報を追加。クラン3.6ツールチェーンを持っているあなたはNDKリビジョン9.
利用可能な最新のクランツールチェーンを使用して(私は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のサポートを持っているしたい場合は、あなたのAndroiにこの行を追加します。 Androidのgccのサポートは今に廃止されていること http://adec.altervista.org/blog/ndk_c11_support/
注:代わりに使用d.mkはもっとここに
LOCAL_CPPFLAGS += -std=c++11
読み取りをAPP_CPPFLAGS。あなたは今clangを使用しているはずです。 version 11 release notesをお読みください。
NDK_TOOLCHAIN_VERSION=clang
インストールされているNDKに基づいて最新バージョンを使用することができます。また---この記事の執筆時点---最新のNDK(v12)はAndroidスタジオを介してのみアクセスでき、ダウンロードページまたはスタンドアロンSDKマネージャを経由することはできません。
http://stackoverflow.com/questions/15269496/how-to-compile-c11-code-with-android-ndk-and-eclipseとhttp:// stackoverflow。com/questions/14014659/android-ndk-error-must-be-std-c11-or-std-gnu11コンパイラ – Michael
@Michael、私はclang 3.2またはgcc 4.8でビルドする必要があります。それは不可能であり、pthreadsを使用してください。 – Kimi
NDKリビジョン10d - GCC 4.8はすべての32ビットABIのデフォルトです –