简体   繁体   中英

I got complition error _GLIBCXX_PERMIT_BACKWARD_HASH on android NDK when using hash_map

I'm in progress of porting my cocos2d-x project from win32 to android. I've been using the hash_map and it causes a lot of problems now.

I googled that I need to include it from different sources on Android NDK and win32, like this:

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

but still, when I compile on NDK r7b I got compilation error:

D:/Developer/Android/android-ndk-r7b/sources/cxx-stl/gnu-libstdc++/include/ext/hash_map:60:30: error: backward_warning.h: No such file or directory

It fails on including backward_warning.h file

#ifndef _GLIBCXX_PERMIT_BACKWARD_HASH
#include "backward_warning.h"
#endif

How can I solve this?

在Android.mk文件中添加一个宏

LOCAL_CFLAGS    :=  -D_GLIBCXX_PERMIT_BACKWARD_HASH 

Bit of a delayed answer, but here is a solution for others that have this problem. You just need to fix the path. Edit your gnu-libstdc++/include/ext/hash_map file and make the following change. It will correctly display the build warning now instead of exiting with missing file error.

Change:

#include "backward_warning.h"

To:

#include "../backward/backward_warning.h"

The local solution is to #include <backward/hash_map> instead of #include <ext/hash_map>

I've just bugged this with Google as Issue 53404 and the best solution I can see involves editing your NDK:

Edit sources/cxx-stl/gnu-libstdc++/Android.mk , find the line gnustl_exported_c_includes and add:

$(LOCAL_PATH)/$(TOOLCHAIN_VERSION)/include/backward

That makes the include paths used by the NDK match those used by g++ in its normal configuration.

Edit: Google have applied this fix upstream; the fix was released with "Android NDK, Revision 9" in July 2013.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM