【问题标题】:Android NDK - Can't use stl map emplaceAndroid NDK - 无法使用 stl map emplace
【发布时间】:2014-01-26 14:12:31
【问题描述】:

使用 android-ndk-r9c,eclipse。 我在 Application.mk 中有这个:

APP_CPPFLAGS += -std=gnu++11

这在 Android.mk 中:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := main

SDL_PATH := ../SDL

LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include
LOCAL_C_INCLUDES := $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.6/include
LOCAL_C_INCLUDES += $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include

# Add your application source files here...
LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \
    animation.cpp \
    camera.cpp \
    entities.cpp \
    graphics.cpp \
    input.cpp \
    level.cpp \
    physics.cpp \
    tiles.cpp \
    utils.cpp \
    main.cpp \

LOCAL_SHARED_LIBRARIES := SDL2

LOCAL_LDLIBS := -lGLESv1_CM -llog
LOCAL_LDLIBS += $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/libgnustl_static.a`

include $(BUILD_SHARED_LIBRARY)

我尝试了很多东西,但编译器一直说“......没有名为'emplace'的成员”

【问题讨论】:

    标签: c++ eclipse stl android-ndk


    【解决方案1】:

    您的 C++ 标准库 (libstdc++) 是 v4.6,它太旧,无法提供 std::map::emplace。您需要 GCC >= v4.8 及其库,否则将 emplace 调用替换为对 insert 的等效调用

    【讨论】:

    • 如果我在 Android.mk 中将 4.6 更改为 4.8,我会遇到大量错误。这是-pastebin.com/iQJ5Crdt。奇怪的是为什么它告诉我我不使用-std=gnu++11,即使它是用 Application.mk 编写的
    • 你不能只在makefile中把“4.6”改成“4.8”!您必须使用 GCC 4.8 作为编译器,并带有适当的makefile。只需将emplace 调用更改为等效的insert 调用就简单多了。谷歌std::map::emplacestd::map::insert了解如何做到这一点。
    【解决方案2】:

    实际上,您似乎有一个错字。第二个 LOCAL_C_INCLUDES 应该是 += 而不是 :=

    LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include
    LOCAL_C_INCLUDES := $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.6/include
    LOCAL_C_INCLUDES += $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include
    

    LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include
    LOCAL_C_INCLUDES += $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.8/include
    LOCAL_C_INCLUDES += $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-20
      • 2011-05-26
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多