Это может быть дубликатом, но я попробовал все решения, которые я нашел на 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.mkOPENCV_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/boostLOCAL_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
Заранее спасибо.
Android NDK 9+ поставляется с LLVM-Libc ++ который имеет полную поддержку функций cpp11. Чтобы включить его, все, что вам нужно сделать, это изменить их в Application.mk:
APP_CPPFLAGS := -std=c++11
а также
APP_STL:=c++_static
или же
APP_STL:=c++_shared
Я тоже столкнулся с этой проблемой. 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.
Вы можете попробовать это:
#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