web-dev-qa-db-ja.com

AndroidでC ++ 11サポートを有効にする

C++ 11をAndroidに統合するにはどうすればよいですか?

72
JonasVautherin

まず、ツールチェーンが「Cross GCC」であることを確認する必要があります。私のLinuxではデフォルトでしたが、MacOSX Lionではそうではありませんでした。

これを行うには、プロジェクトプロパティ> C/C++ビルド>ツールチェーンエディターに移動します。 「Current toolchain」は「Cross GCC」に設定する必要があります。 「互換性のあるツールチェーンのみを表示する」ボックスをオフにする必要がある場合があります。

次に、Android.mkのLOCAL_CFLAGSにオプションを追加します。

LOCAL_CFLAGS := -std=gnu++11

次に、対応する新しいシンボルの場所をEclipseに通知する必要があります(例: "std :: unordered_map")。 「jni」を右クリック>プロパティ> C/C++全般->パスとシンボル->シンボル-> GNU C++に移動し、次のシンボル( 「追加...」をクリックしてください):

Name: __GXX_EXPERIMENTAL_CXX0X__
Value:

(つまり、「値」を空にします)

36
JonasVautherin

ここでの主な答えには、C++ 11の実験的サポートが含まれているようです。C++ 11はもはや実験的ではありません。

コマンドラインNDKサポートを使用している場合(IDEAコミュニティエディション13をJava stuff)に使用している場合、これはjni/Application.mk AP​​I 19(OSX ML上)でC++ 11サポートを取得するには:

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

here および here から派生。

68
scorpiodawg

gradle-experimental-plugin を使用している場合、これをbuild.gradleファイルで設定することもできます。

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

最新の gradle-experimental-plugin 0.8.0-alpha4で、app/build.gradleに追加します:

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