2012-06-14 90 views
2

我试图使用NDK工具链来构建一些本机库,我有ARM。 我在我的部分代码中也使用了ARMv7 NEON内在函数。不幸的是我得到了 以下类型的错误在我的代码的几个地方:Android NDK工具链内部编译器错误

internal compiler error: in write_builtin_type, at cp/mangle.c:1855 

的错误似乎是由使用在 arm_neon.h定义的float32_t型触发 - 例如使用std::vector<float32_t>时,编译器崩溃。

如果是Android ARM的单精度浮点类型是用于 内部编译器内建类型一个typedef而对于Linaro的Linux的例子只是一个的C/C++浮子的typedef - 见arm_neon.h在两个编译器的情况下(我可以用Linaro Linux工具链构建相同的 源代码而不会有任何问题)。

我还发现了一个旧的文章在Android NDK谷歌组,似乎说明了同样的问题,但遗憾的是它没有提出任何解决办法: Some old post describing the same compiler crash

有没有人对如何克服上述问题的任何提示? 是否有任何特殊原因使用内置编译器类型,而不是像Linaro工具链那样的正常浮点数? 如果我替换typedef会导致不需要的/未定义的行为? 有没有人知道基于CodeSourcery工具链的NDK中是否包含工具链,因为CS的确是bug,而且我们的代码库已经以多种方式破坏了它(就像信息一样,我知道我必须改变工具链)?

我使用:

  • 的Android NDK版本R8

  • NDK工具链GCC(海湾合作委员会)4.4.3 - 剥去外面NDK的NDK文档中建议

更新:

发现this other SO question示出几乎相同的问题......可怕的是,它从2010年

更新2是:

更换的typedef是不是因为这将彻底打破NEON内在功能的选项。所有的浮点内部函数都依赖内置的编译器函数,这些编译器函数将__builtin_neon_sf(float32_t的typedef)类型作为它们的参数。

回答

0

您可以尝试Dmitry Moskalchuk的Crystax NDK

+0

这看起来不错,但不幸的是我被绑定到“官方”NDK。在一个侧面说明我也尝试了Linaro的交叉工具链,版本4.7.1,不幸的是,在一些奇怪的方式下,我仍然没有找到解决方案。 – celavek