2

我正在尝试使用 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,例如只是 C/C++ float 的 typedef - 请参阅arm_neon.h两种编译器的情况(我可以使用Linaro Linux 工具链没有任何问题)。

我还在 android NDK Google 小组中发现了一篇旧帖子,似乎描述了同样的问题,但不幸的是它没有提供任何解决方案: 一些旧帖子描述了相同的编译器崩溃

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

我正在使用:

  • 安卓 NDK 版本 r8

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

更新:

发现这个其他 SO question说明了几乎相同的问题......可怕的是它来自 2010 年。

更新 2:

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

4

2 回答 2

0

你可以试试Dmitry Moskalchuk 的Crystax NDK

于 2012-06-17T13:44:28.823 回答
0

这是一个编译器错误。我在 Android 项目错误跟踪器中打开了一个新问题。

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

于 2012-07-18T08:59:03.830 回答