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

Поддержка Android ndk std:: to_string

Я использую android NDK r9d и toolchain 4.8, но я не могу использовать функцию std:: to_string, компилятор выдает эту ошибку:

 error: 'to_string' is not a member of 'std'

Не поддерживается ли эта функция на android ndk? Я стараюсь APP_CPPFLAGS := -std=c++11 без везения.

4b9b3361

Ответ 1

Вы можете попробовать LOCAL_CFLAGS := -std=c++11, но кажется, что функция нескольких строк недоступна для Android NDK.

Альтернативой является его реализация самостоятельно.

#include <string>
#include <sstream>

template <typename T>
std::string to_string(T value)
{
    std::ostringstream os ;
    os << value ;
    return os.str() ;
}

int main()
{
    std::string perfect = to_string(5) ;
}

Ответ 2

С NDK r9 + вы можете использовать llvm-libС++, который предлагает полную поддержку cpp11.

В Application.mk вы должны добавить:

APP_STL:=c++_static 

или

APP_STL:=c++_shared

Ответ 3

Gradle

Если вы ищете решение для системы сборки Gradle. Посмотрите этот ответ.

Короткий ответ.

Добавьте строку

arguments "-DANDROID_STL=c++_shared"

в build.gradle. Как

android {
  ...
  defaultConfig {
    ...
    externalNativeBuild {
      cmake {
        ...
        arguments "-DANDROID_STL=c++_shared"
      }
    }
  }
  ...
}

Ответ 4

Экспериментальный Gradle плагин

Если вы ищете решение для экспериментального плагина Gradle, это сработало для меня...

Протестировано с помощью com.android.tools.build: gradle -experimental: 0.9.1

model {
  ...
  android {
    ...
    ndk {
      ...
      stl = "c++_shared"
    }
  }
}