Android NDK工具链内部编译错误

时间:2012-06-14 12:58:05

标签: android android-ndk cross-compiling

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

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

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

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

我还在android NDK Google小组中发现了一个旧帖子似乎描述了同样的问题,但不幸的是它没有提供任何解决方案: Some old post describing the same compiler crash

有没有人对如何克服上述问题有任何暗示? 是否有任何特殊原因使用内置编译器类型,而不是正常的浮点数,例如Linaro工具链的情况? 如果我替换typedef会导致不需要/未定义的行为? 有没有人知道基于CodeSourcery工具链的NDK中是否包含工具链,因为CS的实际上是错误的,我们的代码库在很多方面打破了它(就像信息一样,我知道我必须改变工具链) ?

我正在使用:

  • Android NDK版本r8

  • NDK工具链gcc(GCC)4.4.3 - 根据NDK文档中的建议在NDK之外剥离

更新:

发现this other SO question说明了几乎相同的问题......可怕的是它是从2010年开始的。

更新2:

更换typedef不是一个选项,因为它会完全破坏NEON内在函数。所有浮点内在函数都依赖于内置编译器函数,这些函数期望__builtin_neon_sf(float32_t的typedef)类型作为其参数。

2 个答案:

答案 0 :(得分:0)

你可以试试Dmitry Moskalchuk的Crystax NDK

答案 1 :(得分:0)

这是编译器错误。我已经开了一个新问题in the Android project bug tracker

不幸的是,为了克服它,我不得不重写导致它的整个代码部分。