Android NDK - 命名空间'std'中没有名为 'function' 的类型
Android NDK - no type named 'function' in namespace 'std'
在使用 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
相关文章:
- 类型擦除的std::function与虚拟函数调用的开销
- 可变参数模板参数扩展 类型为 std::function 的类成员
- 如果 lambda 没有指定的类型,std::function 如何接受 lambda?
- 将函数的参数 - 签名从使用 'std::function<T>' 转换为模板参数类型
- 是否允许类类型的 std::function 成员变量(不完整类型)?
- 如何投射类型擦除的 std::function?
- std::函数指针错误:无法将 &A::a 转换为类型 std::function<>&&
- 错误 C2679:二进制'<<':找不到采用类型 'overloaded-function' 的右侧操作数的运算符(或者没有可接受的转换)
- std::function 中不允许引用返回类型吗?
- 带有 std::function 的 ADL:可以通过 std::function 参数列表中的类型找到采用 std::function 对象的函数吗?
- 派生类中函数参数变化的虚函数按常量类型在"function parameter"会破坏虚拟机制吗?
- MSVC:带函数的"error C2244: unable to match function definition to an existing declaration"是指专用模板类的类型别名
- C++最佳实践 - 函数类型别名 std::function<T> 或 T
- 如何根据"function like"参数推导函数模板的返回类型?
- 为什么 std::function 本身是可复制构造的类型?
- 如何使用函数签名的 typedef 作为 std::function 的类型参数
- 从作为模板函数参数传递的 std::function 推导返回和参数类型
- 无法使用 std::function 作为参数类型(需要函数指针版本)宁愿像 STL 这样的模板,但随后它无法推断参数
- 推导 std::function 结果类型并将其用作参数
- 自动类型推导并将 lambda 传递给 std::function 参数