Android NDK 工具链内部编译器错误

标签 android android-ndk cross-compiling

我正在尝试使用 NDK 工具链为 ARM 构建一些 native 库。 我还在我的部分代码中使用了 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++ float - 参见 arm_neon.h对于两个编译器(我可以构建相同的 源与 Linaro Linux 工具链没有任何问题)。

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

有没有人对如何克服上述问题有任何提示? 是否有任何特殊原因使用内置编译器类型而不是像 Linaro 工具链那样的普通 float ? 如果我替换 typedef 会导致不需要的/未定义的行为吗? 有谁知道 NDK 中包含的工具链是否基于 CodeSourcery 工具链,因为 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)类型作为它们的参数。

最佳答案

你可以试试Crystax NDK作者:Dmitry Moskalchuk。

关于Android NDK 工具链内部编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11033543/

相关文章:

android - 如何在android中访问ZLIB库方法?

c - 交叉编译C代码时出错--未知类型名称 '__syscall_slong_t'

linux - 库和 Mingw-gcc 在 Linux 上交叉编译 Win32 代码的问题

linux - 如何将 Linux 内核交叉编译为 MIPS 小端主机?

android - RxJava Flowable 在 Room db 中的数据发生变化时不调用 Subscriber onNext

android - 如何阻止 "Go"按钮被替换为 "Next"- Chrome Android 浏览器应用程序

android - 如何使用 SavedStateHandle 为 Android ViewModel 编写单元测试

android - top vs/proc/pid/stat 哪个更适合cpu%使用率计算

android - 使用 CrystaX 和 Qt 构建 android 应用程序 : java. lang.UnsatisfiedLinkError

Android 4.2 ndk : library loading crash: load_library(linker. cpp :750) || soinfo_link_image || libhoudini. 所以 ||打开简历