2014-09-29 115 views
4

它可能是重複的,但我嘗試了所有我在StackOverflow上找到的解決方案。錯誤:'to_string'不是'std'的成員

我正在C++上用OpenCV製作一個庫,並試圖爲Android編譯它。我不能使用to_string(int),但我不能。我試圖修改我的makefile太多次。我最後的配置是這樣的:

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

OPENCV_CAMERA_MODULES:=off

OPENCV_INSTALL_MODULES:=on

include $(LOCAL_PATH)/jsoncpp/Android.mk

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

OPENCV_LIB_TYPE:=SHARED

LOCAL_C_INCLUDES += $(LOCAL_PATH)

LOCAL_C_INCLUDES += /Users/rafaelruizmunoz/opencvscan/OpenCVtry/

LOCAL_C_INCLUDES += /Users/rafaelruizmunoz/Desktop/RD/OpenCVtry/Libraries/jsoncpp- master/include

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

include $(BUILD_SHARED_LIBRARY)

,這是我Application.mk

APP_STL := gnustl_static

APP_CPPFLAGS := -frtti -fexceptions

APP_ABI := all

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

在此先感謝。

+0

在嘗試使用'std :: to_string'之前,您的源文件是否包含''......?如果是這樣,你可以使用'g ++ -E ...'來查看預處理器的輸出,並檢查'to_string'是否存在......如果沒有在頭文件中檢查有條件的'#ifdef',並且google在你定義的文件中找不到。 XCode可能會定義您需要的額外預處理器符號... – 2014-09-29 09:08:04

+0

是的,它在XCode上運行良好。當我編譯它時,庫完美地工作。 – 2014-09-29 09:09:26

+0

好的,我打算去做 – 2014-09-29 09:10:10

回答

6

Android NDK 9+自帶llvm-libc++,它完全支持cpp11功能。要啓用它,你所要做的就是修改這些在Application.mk:

APP_CPPFLAGS := -std=c++11 

APP_STL:=c++_static 

APP_STL:=c++_shared 
+0

這個stdlib與GCC兼容,不僅與鏗鏘聲,是不是? – 2016-02-17 10:20:18

3

你可以試試這個:

#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 
4

我也遇到過這個問題。 to_string在gnu-libstdC++「開箱即用」中不可用。我搜索的來源和發現的std :: to_string確實在lib(源極/ CXX-STL/GNU-的libstdC++/4.9 /包含/比特/ basic_string.h),但選擇退出由

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

添加後-D_GLIBCXX_USE_C99到構建std :: to_string被選中。

相關問題