Android NDK - Невозможно использовать stl map emplace

0

Использование 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 ""

Теги:
android-ndk
stl

2 ответа

0

На самом деле, похоже, у вас есть опечатка. Второй 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
0

Ваша стандартная библиотека C++ (libstdC++) - v4.6, которая слишком старая, чтобы обеспечить std::map::emplace. Вам требуется GCC> = v4.8 и его библиотека, а также заменить вызовы emplace эквивалентными вызовами для insert

  • 0
    Я получаю огромное количество ошибок, если я изменяю 4,6 на 4,8 в Android.mk. Вот оно - pastebin.com/iQJ5Crdt . Странно, почему он говорит мне, что я не использую -std=gnu++11 даже если он написан в Application.mk
  • 0
    Вы не можете просто изменить «4.6» на «4.8» в make-файле! Вы должны будете использовать GCC 4.8 в качестве компилятора с соответствующим make-файлом. Гораздо проще просто изменить вызовы emplace на эквивалентные вызовы insert . Google std::map::emplace и std::map::insert чтобы понять, как это сделать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню