【问题标题】:Android NDK - no type named 'function' in namespace 'std'Android NDK - 命名空间“std”中没有名为“function”的类型
【发布时间】:2013-10-10 09:58:44
【问题描述】:

在使用 Cocos-2dx 和 Clang 构建时,我在 Android NDK 中不断收到以下错误

jni/../../Classes/Facebook/FacebookConstants.h:44:14: error: no type named 'function' in namespace 'std'
typedef std::function<void()> FacebookLoginCallback;

TApplication.mk

NDK_TOOLCHAIN_VERSION := clang
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DCOCOS2D_DEBUG=1

Android.mk

LOCAL_CFLAGS :=-D__GXX_EXPERIMENTAL_CXX0X__
LOCAL_CPPFLAGS  := -std=c++11
LOCAL_CFLAGS += -std=gnu++11
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := game_shared

LOCAL_MODULE_FILENAME := libgame

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../Classes/AppDelegate.cpp \
                   ../../Classes/Facebook/Request.cpp \
                   ../../Classes/FriendListCell.cpp \
                   ../../Classes/Game.cpp \
                   ../../Classes/GameListCell.cpp \
                   ../../Classes/GameListHeaderCell.cpp \
                   ../../Classes/GameScene.cpp \
                   ../../Classes/LoginScene.cpp \
                   ../../Classes/MenuScene.cpp \
                   ../../Classes/NewGameScene.cpp \
                   ../../Classes/Parse/curl/docs/examples/asiohiper.cpp \
                   ../../Classes/Parse/curl/docs/examples/htmltitle.cpp \
                   ../../Classes/Parse/HTTP.cpp \
                   ../../Classes/Parse/lib_json/json_reader.cpp \
                   ../../Classes/Parse/lib_json/json_value.cpp \
                   ../../Classes/Parse/lib_json/json_writer.cpp \
                   ../../Classes/Parse/ParseHTTP.cpp \

LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Classes \
                      $(LOCAL_PATH)/../../Classes/Parse \
                      $(LOCAL_PATH)/../../Classes/Parse/json \
                      $(LOCAL_PATH)/../../Classes/Parse/lib_json \
                      $(LOCAL_PATH)/../../Classes/Facebook \

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static

include $(BUILD_SHARED_LIBRARY)

$(call import-module,CocosDenshion/android) \
$(call import-module,cocos2dx) \
$(call import-module,extensions)

【问题讨论】:

  • NDK 是否支持 C++11?
  • 应该可以,我通过将内容从 LOCAL_CPP_FLAGS 移动到 APP_CPP_FLAGS 来修复它。显然我在网上阅读的示例已经过时了 :) 我还必须添加一个标志来防止游戏引擎本身导致的缩小错误
  • 好吧,如果你已经修好了,别忘了尽可能给出答案。

标签: android c++ android-ndk cocos2d-x


【解决方案1】:

我认为您没有链接器错误。你有一个编译器错误。问题是,您的应用程序中没有提到对 C++11 的支持。您必须通过在 Application.mk 文件夹中的 Application.mk 文件中指定 -std=c++11 编译器标志 (APP_CPPFLAGS) 来使用 Clang 附带的那个。即

APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DCOCOS2D_DEBUG=1 -std=c++11

【讨论】:

    【解决方案2】:

    不要忘记将其包含在标题中

    #include <functional>
    

    在我的项目 cocos2d-x v3.0.0 中,Android 构建需要这个,但 iOS 不需要。我猜它包含在其他地方。

    【讨论】:

      【解决方案3】:

      我有同样的问题,并通过这样做来解决它:

      Android.mk文件中,添加

      LOCAL_CPP_EXTENSION += .h 
      

      【讨论】:

      • 你能在你的答案中添加更多细节吗?它解决了问题吗?您在哪里进行了修改?
      猜你喜欢
      • 2014-09-21
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 2020-04-21
      • 2013-05-27
      相关资源
      最近更新 更多