Android NDK - 命名空间'std'中没有名为 'function' 的类型

Android NDK - no type named 'function' in namespace 'std'

本文关键字:类型 function std NDK 命名空间 Android      更新时间:2023-10-16

在使用 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)

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

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

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

#include <functional>

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

我有同样的问题,并通过执行以下操作来重新喜欢它:

在 Android.mk 文件中,添加

LOCAL_CPP_EXTENSION += .h 
相关文章: