2012-03-07 53 views
4

我正在將我的cocos2d-x項目從win32移植到android。我一直在使用hash_map,現在它導致了很多問題。我得到了complition錯誤_GLIBCXX_PERMIT_BACKWARD_HASH在android NDK上使用hash_map

我一派,我需要通過Android NDK和Win32不同的來源包括,就像這樣:

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

但儘管如此,當我編譯的NDK經R 7b我得到的編譯錯誤:

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

它未能對包括backward_warning.h文件

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

我怎樣才能解決這個問題?

+0

考慮使用[Boost.Unordered](http://www.boost.org/libs/unordered/)而不是編譯器提供的實現。 – ildjarn 2012-03-07 23:07:59

+0

@ildjarn會在android NDK和後來的iPhone XCode3/4上編譯嗎? – michael 2012-03-07 23:11:26

+0

對兩者都是。另請注意,該實現僅用於標題,因此不需要單獨的編譯或鏈接 - 只需包含必要的標題即可。 – ildjarn 2012-03-07 23:18:21

回答

0

延遲答案的位,但這裏是解決其他人有這個問題的解決方案。你只需要修復路徑。編輯你的gnu-libstdC++/include/ext/hash_map文件並進行以下更改。它會正確顯示構建警告,而不是退出時丟失文件錯誤。

變化:

#include "backward_warning.h" 

要:

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

但是,您會收到一個棄用的錯誤。 Unordered_map應該用來代替,但我不知道如何包含它。 – JonesV 2013-03-21 10:47:25

4

在Android.mk添加宏文件

LOCAL_CFLAGS := -D_GLIBCXX_PERMIT_BACKWARD_HASH 
+0

這是正確的答案,在我的情況下完美。 – accordionfolder 2013-03-13 18:30:27

+0

對於使用Qt Creator構建Android應用程序的用戶,只需將該標誌作爲定義添加到受限於android-g ++範圍的相關.pro文件。 – darrenp 2016-09-29 17:53:33

0

本地解決方案,而不是到#include <backward/hash_map>#include <ext/hash_map>

我剛剛與谷歌竊聽以此爲Issue 53404,我可以看到最好的解決方案涉及編輯您的NDK:

編輯sources/cxx-stl/gnu-libstdc++/Android.mk,找到行gnustl_exported_c_includes並添加:

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

這使得包括使用的路徑由NDK匹配在正常配置中由g ++使用的那些。

編輯:谷歌已經應用此修補程序上游;該修補程序在2013年7月發佈爲「Android NDK,修訂版9」。

相關問題