我正在尝试使用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)类型作为其参数。
答案 0 :(得分:0)
你可以试试Dmitry Moskalchuk的Crystax NDK。
答案 1 :(得分:0)
这是编译器错误。我已经开了一个新问题in the Android project bug tracker。
不幸的是,为了克服它,我不得不重写导致它的整个代码部分。