我正在开发一个应用程序,我将在其中使用 Android NDK 和 JNI。
每当我在任何 android 4.0 或更高版本上运行我的应用程序时...我的应用程序将崩溃并出现以下错误...

A/libc(18556): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)
D/libEGL(18606): loaded /system/lib/egl/libGLES_android.so
D/libEGL(18606): loaded /system/lib/egl/libEGL_adreno200.so
D/libEGL(18606): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
D/libEGL(18606): loaded /system/lib/egl/libGLESv2_adreno200.so
I/Adreno200-EGLSUB(18606): <ConfigWindowMatch:2078>: Format RGBA_8888.
D/OpenGLRenderer(18606): Enabling debug mode 0

主要问题是Fatal signal 11 (SIGSEGV) at 0xdeadbaad(code=1)
如果有人知道这件事...然后告诉我原因。

最佳答案

最初,段错误,特别是 0xdeadbaad,意味着内存损坏或类似问题,但是,我最近发现,对于 NDK,这也是断言的默认行为:断言失败时,它发送 SIGSEGV,而不是 SIGTRAP,并且将内存指针设置为该十六进制字符串。

您应该检查您的代码是否正在调用断言,或者,如果您使用第三方软件,请检查您是否将正确的值传递给每个调用。检查这一点的快速方法是将 NDEBUG 设置为 1(默认情况下,如果您在 Application.mk 中设置 APP_OPTIM := release)并检查您是否仍然遇到完全相同的问题。

希望这可以帮助。

10-04 17:10