5

我正在开发一个应用程序,我将在其中使用 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)

如果有人知道这...然后告诉我原因。

4

1 回答 1

0

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

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

希望这可以帮助。

于 2012-10-07T20:23:34.037 回答