为啥启用 NEON SIMDization 时 Android 会崩溃?信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR)

Posted

技术标签:

【中文标题】为啥启用 NEON SIMDization 时 Android 会崩溃?信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR)【英文标题】:Why Android crash when NEON SIMDization enabled? signal 11 (SIGSEGV), code 1 (SEGV_MAPERR)为什么启用 NEON SIMDization 时 Android 会崩溃?信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) 【发布时间】:2012-12-21 03:59:23 【问题描述】:

我正在对我的代码进行一些基于 NEON 的 SIMD 化。 它在没有 SIMDization 的情况下工作得很好,但是在 makefile 中添加以下一行会导致它崩溃,

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
    LOCAL_ARM_NEON := true
endif

是否有人可以通过启用 NEON 来帮助确定它崩溃的原因,并且代码保持完全相同?

问候, 苏布兰苏

【问题讨论】:

是否可以在不支持 NEON 的设备上运行它?您不会分享任何有关您的代码的内容,因此此时可能有很多内容。 你解决了吗?我现在也遇到了同样的问题! 【参考方案1】:

首先检查你的处理器特性,看看它是否真的有 NEON,

并非所有基于 ARMv7 的 android 设备都支持 NEON

您可以查看处理器数据表。

根据文档,可能是您的源代码,

在您的 LOCAL_SRC_FILES 变量中列出源文件时,您现在 可以选择使用 .neon 后缀来表示您想要 在 Neon 支持下构建相应的源。例如:

LOCAL_SRC_FILES := foo.c.neon bar.c

只会在支持 NEON 的情况下构建“foo.c”。

对于构建,您的目标是 armeabi-v7a ABI 吗?你可以在你的 Android.mk 中检查它 由

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)

所以检查所有这些因素,看看是什么导致了崩溃

NDK 示例是一个很好的入门资源,请看一下。 祝你好运

【讨论】:

以上是关于为啥启用 NEON SIMDization 时 Android 会崩溃?信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR)的主要内容,如果未能解决你的问题,请参考以下文章

未找到Android Studio NDK iostream文件,无法在CMakeList中启用neon

如何在 Xcode 中启用 Neon 指令

如何在 Eclipse Neon 中启用 C++11 语法?

eclipse neon 为啥没有windows builder

为啥他们仍然有单独的浮点单元,如果在 ARM 皮质处理器中有用于快速处理浮点的 Neon。 [关闭]

为啥库需要硬编码矢量化而不是编译器自动矢量化