android — ошибка: ‘to_string’ не является членом ‘std’

Это может быть дубликатом, но я попробовал все решения, которые я нашел на StackOverflow.

Я делаю библиотеку на C ++ с OpenCV и пытаюсь скомпилировать ее для Android.

Я не могу использовать to_string(int)но я не могу. Я пытался изменить мой make-файл слишком много раз. Моя последняя конфигурация:

Android.mk

LOCAL_PATH: = $ (позвоните в мой каталог)

включает $ (CLEAR_VARS)

OPENCV_CAMERA_MODULES: = выкл

OPENCV_INSTALL_MODULES: = о

include $ (LOCAL_PATH) /jsoncpp/Android.mk

include /Users/rafaelruizmunoz/Desktop/AndroidDevelopment/OpenCV-2.4.9-android-
SDK / SDK / родной / JNI / OpenCV.mk

OPENCV_LIB_TYPE: = ШАРЕД

LOCAL_C_INCLUDES + = $ (LOCAL_PATH)

LOCAL_C_INCLUDES + = / Пользователи / rafaelruizmunoz / opencvscan / OpenCVtry /

LOCAL_C_INCLUDES + = / Пользователи / rafaelruizmunoz / Рабочий стол / RD / OpenCVtry / Библиотеки / jsoncpp-
ведущий / включить

LOCAL_PATH: = jni

LOCAL_ALLOW_UNDEFINED_SYMBOLS: = true

LOCAL_MODULE: = libXYZ

LOCAL_MODULE_NAME: = mylibXYZ

LOCAL_SRC_FILES: = androidClass.cpp main.cpp utils.cpp

LOCAL_LDLIBS + = -llog -ldl

LOCAL_CPPFLAGS: = -std = c ++ 11 CFLAGS = -g -Wall -Wextra -std = c ++ 11 -Wno-write-strings
../../include/boost

LOCAL_SHARED_LIBRARIES: = libJsoncpp libopencv_java

включает $ (BUILD_SHARED_LIBRARY)

а это мой Application.mk

APP_STL: = gnustl_static

APP_CPPFLAGS: = -frtti -fexceptions

APP_ABI: = все

APP_MODULES: = libXYZ libJsoncpp

APP_CPPFLAGS: = -std = gnu ++ 0x

APP_CPPFLAGS + = -frtti

APP_CPPFLAGS + = -fexceptions

APP_CPPFLAGS + = -DDEBUG

APP_CPPFLAGS + = -std = c ++ 11

NDK_TOOLCHAIN_VERSION: = 4,8

LOCAL_C_INCLUDES + = $ {ANDROID_NDK} / sources / cxx-stl / gnu-libstdc ++ / 4.8 / include

APP_USE_CPP0X: = true

Заранее спасибо.

6

Решение

Android NDK 9+ поставляется с LLVM-Libc ++ который имеет полную поддержку функций cpp11. Чтобы включить его, все, что вам нужно сделать, это изменить их в Application.mk:

APP_CPPFLAGS := -std=c++11

а также

APP_STL:=c++_static

или же

APP_STL:=c++_shared
6

Другие решения

Я тоже столкнулся с этой проблемой. to_string не доступен в gnu-libstdc ++ «из коробки». Я искал источники и обнаружил, что std :: to_string действительно находится в lib (sources / cxx-stl / gnu-libstdc ++ / 4.9 / include / bits / basic_string.h), но отказался от

#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
&& !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))

После добавления -D_GLIBCXX_USE_C99 в сборку включается std :: to_string.

4

Вы можете попробовать это:

#include <string>
#include <sstream>

#if defined(__ANDROID__)
#define TO_STRING to_stringAndroid

template <typename T>
inline std::string to_stringAndroid(T value)
{
std::ostringstream os ;
os << value ;
return os.str() ;
}#else

#define TO_STRING std::to_string

#endif
3
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector