使用哈希映射时,我在android NDK上遇到了编译错误\u GLIBCXX\u PERMIT\u BACKWARD\u HASH

使用哈希映射时,我在android NDK上遇到了编译错误\u GLIBCXX\u PERMIT\u BACKWARD\u HASH,android,c++,hashmap,cocos2d-x,android-stlport,Android,C++,Hashmap,Cocos2d X,Android Stlport,我正在将我的cocos2d-x项目从win32移植到android。我一直在使用hash_映射,现在它引起了很多问题 我在谷歌上搜索到,我需要在Android NDK和win32上包含来自不同来源的信息,如下所示: #ifdef __GNUC__ #include <ext/hash_map> #else #include <hash_map> #endif 我该如何解决这个问题呢?答案有点延迟,但这里有一个解决方案,可供其他有此问题的人使用。您只需要修复路径。编辑gn

我正在将我的cocos2d-x项目从win32移植到android。我一直在使用hash_映射,现在它引起了很多问题

我在谷歌上搜索到,我需要在Android NDK和win32上包含来自不同来源的信息,如下所示:

#ifdef __GNUC__
#include <ext/hash_map>
#else
#include <hash_map>
#endif

我该如何解决这个问题呢?

答案有点延迟,但这里有一个解决方案,可供其他有此问题的人使用。您只需要修复路径。编辑gnu libstdc++/include/ext/hash_映射文件并进行以下更改。它将立即正确显示生成警告,而不是以丢失文件错误退出

更改:

#include "backward_warning.h"
致:


在Android.mk文件中添加宏

LOCAL_CFLAGS    :=  -D_GLIBCXX_PERMIT_BACKWARD_HASH 

本地解决方案是
#包含
,而不是
#包含

我刚刚用Google as对此进行了调试,我能看到的最佳解决方案包括编辑您的NDK:

编辑
sources/cxx stl/gnu libstdc++/Android.mk
,找到行
gnustl\u exported\u c\u includes
,并添加:

$(LOCAL_PATH)/$(TOOLCHAIN_VERSION)/include/backward
这使得NDK使用的include路径与g++在其正常配置中使用的路径匹配


编辑:谷歌已经在上游应用了这个补丁;该修复程序于2013年7月随“Android NDK,修订版9”一起发布。

考虑使用而不是编译器提供的实现。@ildjarn将在Android NDK和更高版本的iphone XCode3/4上编译它吗?是的。还要注意的是,该实现只是标题,因此不需要单独编译或链接——只需包含必要的标题,就可以了。注意,这在Android NDK修订版9的上游已修复。但是,随后会出现一个不推荐使用的错误。应该使用无序的_映射,但我不知道如何包含它。对于那些使用Qt Creator构建Android应用程序的人,只需将该标志作为定义添加到限制在Android-g++范围内的相关.pro文件中即可。
LOCAL_CFLAGS    :=  -D_GLIBCXX_PERMIT_BACKWARD_HASH 
$(LOCAL_PATH)/$(TOOLCHAIN_VERSION)/include/backward