6

ndk 8bにアップグレードすると、クラッシュレポートが表示されます(ほとんどはAndroid4.03を搭載したGalaxySIIです)

java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1286]: 1836 cannot locate '__gnu_thumb1_case_uqi'...
at java.lang.Runtime.loadLibrary(Runtime.java:370)
at java.lang.System.loadLibrary(System.java:535)
at com.iuculano.fplayer.SDLActivity.void onCreate(android.os.Bundle)(SourceFile:324)
at android.app.Activity.performCreate(Activity.java:4465)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
at android.app.ActivityThread.access$600(ActivityThread.java:127)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4507)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)

例外は単純なものによって引き起こされますSystem.loadLibrary("main");

どういう意味ですか?cannot locate '__gnu_thumb1_case_uqi'

4

3 に答える 3

6

__gnu_thumb1_case_uqi、密集したスイッチ テーブルでインデックス付きジャンプを行うヘルパーです。スイッチをすばやく実装します。回避するか、リンクするかの 2 つのオプションがあります。

( を使用して) 最適化レベルを上げると、-O3このシンボルは不要になる場合があります。また、thumb2命令を使用するだけでなく、CPU を変更することも役立つ場合があります。オプションを指定してコンパイルすると、-ffreestandingこのシンボルも回避される場合があります。switch ステートメントを制御できる場合は、それを関数ポインターの配列に置き換えることができます。

このルーチンはlibgcc内にあります。libgccを静的にリンクできます。Android SDK/コンパイラのどこかに、libgcc.a. とリンクしlibgcc.a、リンカー オプションを使用-Lして、コードを取得します ( http://gcc.gnu.org/onlinedocs/gcc/Link-Options.htmlを参照)。-l-static-libgcc

編集: 何もコンパイルしていない場合はlibgcc.so、システムで見つけることができます。/libAndroidデバイスにとっては、/usr/lib奇妙な場所にある可能性があります。libgcc.soが配置されているディレクトリを環境変数に追加するとLD_LIBRARY_PATH、問題が解決する場合もあります。残念なことに、Samsung が互換性のないバイナリをリリースしたため、独自のコードをコンパイルしない限り、問題を修正する方法がありません。マルチライブラリディストリビューションのようなものの中では正しいlibgcc.soかもしれません。/usr/lib/thumbDavlik についてはよくわかりませんが、Android JVM は実行時に正しいライブラリ セットを指していない可能性があります。

于 2013-01-09T17:09:29.567 に答える
2

armv7用にコンパイルしていますか?そうでない場合は、armv7 用にコンパイルしてみてください。

于 2012-08-31T08:22:25.807 に答える
1

複数のアーキテクチャ用に最適化された NDK コードを生成していますか?

上記のリンクで受け入れられた回答の「腕」と「親指」について読んでください。

次に、設定手順を削除して親指用にビルドし、アーム用にビルドしていることを確認します...

また...

大げさな推測をするのは難しいです...「Android.mk」のリンカーステートメントにあるライブラリの順序です

ndkのGoogleフォーラムを試してください...「シンボルが見つかりません」を検索してください...

本当に必死?

ここの「実行時エラー」セクションを参照してください

于 2012-08-31T20:56:25.687 に答える