Android ndk 8b-Bibliothek kann Nicht geladen werden
Upgrade auf ndk 8b erhalte ich einige crash-Bericht (die meisten von Ihnen sind Galaxy SII mit Android 4.03)
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)
Ausnahme verursacht wird durch einen einfachen System.loadLibrary("main");
Was bedeutet es? cannot locate '__gnu_thumb1_case_uqi'
- bitte führen Sie Ihre ndk-build mit V=1 und poste die Befehlszeile für die Verknüpfung Schritt
- Haben Sie hatte keine Probleme mit Geräten mit OS != 4.0.3?
- Hallo, ich stehe vor demselben Problem, wo ich bin laden SQLiteDatabase.loadLibs(dieses) und es wirft mich über die Ausnahme. Das funktioniert in Android 4.2 und höher, aber funktioniert nicht in HTC one V-Gerät mit v4.0.3, bitte um Hilfe!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
__gnu_thumb1_case_uqi
ist ein Hilfsprogramm, das die indizierten Sprung auf einen dicht gepackten switch-Tabelle; schnell implementiert die switch. Sie haben zwei Optionen: Sie vermeiden oder die Verknüpfung mit es.Wenn Sie erhöhen, eine Optimierung (durch die Verwendung
-O3
), die Sie vielleicht nicht brauchen, dieses symbol. Auch das ändern der CPU helfen kann, als auch die Verwendung vonthumb2
Anweisungen. Kompilieren mit der-ffreestanding
option kann auch vermeiden dieses symbol. Wenn Sie haben die Kontrolle über die switch-Anweisung, können Sie ersetzen Sie es mit einem array von Funktionszeigern.Diese routine ist innerhalb libgcc. Sie können statisch link libgcc. Irgendwo in den Android-SDK/compiler, es muss eine
libgcc.a
. Link mitlibgcc.a
mit-L
und-l
oder verwenden Sie-static-libgcc
linker-option um den code zu erhalten (siehe http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html).Edit: Wenn Sie nicht alles kompilieren, dann finden Sie
libgcc.so
auf Ihrem system. Es wäre in/lib
oder/usr/lib
oder vielleicht einige Ort seltsam für Android-Geräte. Das hinzufügen der Ordner, wo dielibgcc.so
liegt die UmgebungsvariableLD_LIBRARY_PATH
könnte das problem auch lösen. Es ist vielleicht bedauerlich, dass Samsung veröffentlicht das inkompatible Binärdateien und Sie haben keine Möglichkeit, um das Problem zu beheben, wenn Sie sich nicht kompilieren von code. Die richtigelibgcc.so
vielleicht im inneren etwas wie/usr/lib/thumb
für multi-lib-Distributionen. Ich weiß nicht viel über den Davlik Zeug, aber die Android-JVM möglicherweise nicht auf den richtigen Satz von Bibliotheken, wenn es läuft.__gnu_thumb1_case_uqi
in keiner der Bibliotheken.Sind Sie kompilieren für armv7? Wenn Sie nicht sind, versuchen Sie kompilieren für armv7.
Herstellung optimiert NDK code für mehrere Architekturen?
Lesen über 'arm' vs 'Daumen' in der akzeptierten Antwort in dem oben genannten link.
entfernen Sie dann deine config-Anweisungen zu erstellen, die für Daumen und stellen Sie sicher, dass Sie bauen für den arm...
... ODER
krank machen eine wilde Vermutung ... seine Bibliothek, um Sie in der linker-Anweisung in der 'Android.mk'
versuchen die google forum für ndk ... die Suche nach "nicht suchen, symbol"...
Wirklich verzweifelt?
siehe "Laufzeit-Fehler" Abschnitt hier