Android 错误:';到字符串';不是';std&x27;
它可能是重复的,但我尝试了在StackOverflow内外找到的所有解决方案 我正在用C++编写一个C++库,并试图为Android编译它。< /P> 我不能使用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
来创建字符串(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))