Android 错误:';到字符串';不是';std&x27;

Android 错误:';到字符串';不是';std&x27;,android,c++,opencv,c++11,android-ndk,Android,C++,Opencv,C++11,Android Ndk,它可能是重复的,但我尝试了在StackOverflow内外找到的所有解决方案 我正在用C++编写一个C++库,并试图为Android编译它。< /P> 我不能使用来创建字符串(int),但我不能。我尝试修改makefile的次数太多了。我的最后一个配置是: Android.mk 本地路径:=$(调用我的目录) 包括$(清除变量) OPENCV_摄像头_模块:=关闭 OPENCV_安装_模块:=打开 包括$(本地路径)/jsoncpp/Android.mk include/Users/rafael

它可能是重复的,但我尝试了在StackOverflow内外找到的所有解决方案

我正在用C++编写一个C++库,并试图为Android编译它。< /P> 我不能使用
来创建字符串(int)
,但我不能。我尝试修改makefile的次数太多了。我的最后一个配置是:

Android.mk

本地路径:=$(调用我的目录)

包括$(清除变量)

OPENCV_摄像头_模块:=关闭

OPENCV_安装_模块:=打开

包括$(本地路径)/jsoncpp/Android.mk

include/Users/rafaelruizmunoz/Desktop/AndroidDevelopment/OpenCV-2.4.9-android- sdk/sdk/native/jni/OpenCV.mk

OPENCV_LIB_类型:=共享

本地_C_包括+=$(本地_路径)

本地_C_包括+=/Users/rafaelruizmunoz/opencvscan/OpenCVtry/

本地C_包括+=/Users/rafaelruizmunoz/Desktop/RD/OpenCVtry/Libraries/jsoncpp- 主/包括

本地路径:=jni

本地\u允许\u未定义的\u符号:=真

本地_模块:=libXYZ

本地模块名称:=mylibXYZ

本地_SRC_文件:=androidClass.cpp main.cpp utils.cpp

局部低密度脂蛋白血症+=-llog-ldl

localcppuflags:=-std=c++11 CFLAGS=-g-Wall-Wextra-std=c++11-Wno写字符串 ../../include/boost

本地共享库:=libJsoncpp libopencv\u java

包括$(构建共享库)

这是我的应用程序。mk

APP_STL:=gnustl_static

APP_CPPFLAGS:=-frti-feexceptions

APP_ABI:=全部

APP_模块:=libXYZ libJsoncpp

APP_CPPFLAGS:=-std=gnu++0x

APP_CPPFLAGS+=-frtti

APP_CPPFLAGS+=-feexceptions

APP_CPPFLAGS+=-DDEBUG

APP_CPPFLAGS+=-std=c++11

NDK_工具链_版本:=4.8

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

APP\u USE\u CPP0X:=真

提前感谢。

Android NDK 9+附带了对cpp11功能的全面支持。要启用它,您只需在Application.mk中修改以下内容:

APP_CPPFLAGS := -std=c++11

你可以试试这个:

#include <string>
#include <sstream>

#if defined(__ANDROID__)
#define TO_STRING to_stringAndroid

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


#else

#define TO_STRING std::to_string

#endif
#包括
#包括
#如果已定义(\uuuu ANDROID\uuuu)
#定义到\u字符串到\u字符串
模板
内联标准::字符串到字符串(常量T和值)
{
std::ostringstream os;

os我也遇到了这个问题。to_字符串在gnu libstdc++“开箱即用”中不可用。我搜索了源代码,发现std::to_字符串确实在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_字符串。

在尝试使用
std::to_字符串之前,源文件是否包含
?如果是,可以使用
g++-E…
查看预处理器输出,并检查
to_字符串是否存在…如果没有,请检查中的条件
\ifdef
e header和google任何您缺少的定义。XCode可能正在定义您需要的额外预处理器符号…是的,它在XCode上运行得非常好。当我编译它时,该库工作得非常完美。好的,我将这样做。该stdlib与GCC兼容,而不仅仅与clang兼容,是吗?最好将参数作为引用传递:
inline std::字符串到字符串(常量T和值)
#include <string>
#include <sstream>

#if defined(__ANDROID__)
#define TO_STRING to_stringAndroid

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


#else

#define TO_STRING std::to_string

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