4

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

我用谷歌搜索我需要在 Android NDK 和 win32 的不同来源中包含它,如下所示:

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

但是,当我在 NDK r7b 上编译时,我得到了编译错误:

D:/Developer/Android/android-ndk-r7b/sources/cxx-stl/gnu-libstdc++/include/ext/hash_map:60:30:错误:backward_warning.h:没有这样的文件或目录

包含backward_warning.h文件失败

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

我该如何解决这个问题?

4

3 回答 3

4

在 Android.mk 文件中添加宏

LOCAL_CFLAGS    :=  -D_GLIBCXX_PERMIT_BACKWARD_HASH 
于 2013-02-06T07:37:03.617 回答
0

有点延迟的答案,但这是其他有此问题的人的解决方案。你只需要修复路径。编辑您的 gnu-libstdc++/include/ext/hash_map 文件并进行以下更改。它现在将正确显示构建警告,而不是因缺少文件错误而退出。

改变:

#include "backward_warning.h"

至:

#include "../backward/backward_warning.h"
于 2012-08-24T06:54:52.030 回答
0

本地解决方案是#include <backward/hash_map>代替 #include <ext/hash_map>

我刚刚在 Google 上将其作为问题 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”一起发布。

于 2013-03-15T12:25:30.693 回答