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 では、これがアサーションのデフォルトの動作でもあることがわかりました。アサートが失敗すると、SIGTRAP ではなく SIGSEGV を送信し、メモリ ポインタをこの 16 進文字列に設定します。

コードが assert を呼び出していることを確認するか、サードパーティのソフトウェアを使用している場合は、すべての呼び出しに適切な値を渡していることを確認する必要があります。これを確認する簡単な方法は、NDEBUG を 1 に設定してライブラリをビルドし (デフォルトでは、Application.mk で APP_OPTIM := release を設定した場合)、まったく同じ問題がまだ発生しているかどうかを確認することです。

お役に立てれば。

于 2012-10-07T20:23:34.037 に答える