【问题标题】:Application crash with android 4.0 or higher versionandroid 4.0 或更高版本的应用程序崩溃
【发布时间】:2012-09-26 19:38:57
【问题描述】:

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

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

【问题讨论】:

  • 你的 .SO 坏了。您在 C 代码中存在分段错误。发布源代码,格式化答案,也许我们可以到达某个地方。
  • 确实如此。 SIGSEGV 应该是一个死的赠品。
  • 日志中通常会有更多信息,例如stackoverflow.com/questions/5314036/…

标签: android android-ndk java-native-interface native-code


【解决方案1】:

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2011-06-26
    • 1970-01-01
    相关资源
    最近更新 更多