Подтвердить что ты не робот

Включить поддержку С++ 11 на Android

Как интегрировать С++ 11 в Android?

4b9b3361

Ответ 1

Прежде всего, вам нужно убедиться, что ваша инструментальная цепочка - "Cross GCC". Несмотря на то, что это был по умолчанию мой Linux, это было не на моем MacOSX Lion.

Для этого перейдите в Project Properties > C/С++ Build > Редактор цепочки инструментов. "Текущая привязка" должна быть установлена ​​на "Cross GCC". Возможно, вам необходимо снять флажок "Только совместимые с дисплеем инструменты".

Затем добавьте опцию LOCAL_CFLAGS в Android.mk:

LOCAL_CFLAGS := -std=gnu++11

Теперь нам нужно сообщить Eclipse о том, где найти соответствующие новые символы (например, "std:: unordered_map" ). Перейдите к Щелкните правой кнопкой мыши на "jni" > "Свойства" > "C/С++ Общие" → "Контуры и символы" → "Символы" → "GNU С++" и добавьте следующий символ (нажав "Добавить..." )

Name: __GXX_EXPERIMENTAL_CXX0X__
Value:

(т.е. "Пустое значение" )

Ответ 2

Похоже, главный ответ здесь включает экспериментальную поддержку для С++ 11, а С++ 11 больше не является экспериментальным.

Если вы используете поддержку NDK в командной строке (я использую сообщество сообщества IDEA 13 для Java-материала), то это то, что мне пришлось поместить в мой jni/Application.mk, чтобы получить поддержку С++ 11 с API 19 (on OSX ML):

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

Получено из здесь и здесь.

Ответ 3

Вы также можете установить это в файле build.gradle, если используете gradle -experimental-plugin:

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

Ответ 4

С последним gradle -experimental-plugin 0.8.0-alpha4 добавить в приложение /build.gradle:

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