Laden von freigegebenen Bibliotheken, die von anderen freigegebenen Bibliotheken abhängen

Problem:

Ich baue eine Android-App in Eclipse, die eine gemeinsam genutzte Bibliothek verwendetlibgstreamer-0.10.so (GStreamer-android NDK Bundle-Bibliotheken für Android-8-Plattform kompiliert). Ich habe einen neuen Ordner erstelltlibs/armeabi im Projekt-Root-Ordner und legen Sie es dort ab. Außerdem habe ich alle anderen mitgelieferten Bibliotheken (158 davon) in denselben Ordner gestellt. Wenn ich dies in meinen Hauptaktivitätscode schreibe:

static{
    System.loadLibrary("gstreamer-0.10");
}

Und baue / installiere / starte meine App auf dem Android-8-Emulator, es gibt folgenden Fehler aus:

06-15 21:54:00.835: E/AndroidRuntime(402): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1962]:    33 could not load needed library 'libglib-2.0.so' for 'libgstreamer-0.10.so' (load_library[1104]: Library 'libglib-2.0.so' not found)

Jetzt,libglib-2.0.so befindet sich im selben Ordner wielibgstreamer-0.10.so, und warum wird es nicht geladen? Ich bekomme den Linker versucht, es von zu laden/system/lib undlibglib-2.0.so ist einfach nicht da, aber warum wird es nicht von dem Ort geladen, an demlibgstreamer-0.10.so ist?

Also habe ich herausgefunden, welche Bibliotheken es gibtlibgstreamer-0.10.so hängt mit diesem Befehl ab:

arm-linux-androideabi-readelf -d libgstreamer-0.10.so

Ergebnisse:

Dynamic section at offset 0x118b64 contains 29 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libglib-2.0.so]
 0x00000001 (NEEDED)                     Shared library: [libgobject-2.0.so]
 0x00000001 (NEEDED)                     Shared library: [libgthread-2.0.so]
 0x00000001 (NEEDED)                     Shared library: [libgmodule-2.0.so]
 0x00000001 (NEEDED)                     Shared library: [libdl.so]
 0x00000001 (NEEDED)                     Shared library: [libm.so]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.so]
 0x00000001 (NEEDED)                     Shared library: [libc.so]
 0x0000000e (SONAME)                     Library soname: [libgstreamer-0.10.so]
 0x00000010 (SYMBOLIC)                   0x0

Die ersten vierlibglib-2.0.so, libgobject-2.0.so, libgthread-2.0.so, libgmodule-2.0.so befinden sich alle im selben Ordnerlibgstreamer-0.10.so befindet sich in (/data/data/com.marko.gstreamer_test/lib) auf dem Gerät.

Logische Lösung:

Also habe ich versucht, diese vier Bibliotheken zu laden, bevor ich sie ladelibgstreamer-0.10.so und es hat funktioniert:

static{
    System.loadLibrary("glib-2.0");
    System.loadLibrary("gthread-2.0");
    System.loadLibrary("gobject-2.0");
    System.loadLibrary("gmodule-2.0");
    System.loadLibrary("gstreamer-0.10");
}

Meine Fragen sind:

Kann ich den Linker irgendwie anweisen, Libs auch vom App-Speicherort aus zu laden? Fügen Sie beispielsweise einen Pfad zu einer Umgebungsvariablen oder etwas Ähnlichem wie PATH unter Linux hinzu.

Hat meine Lösung einige schlimme Nebenwirkungen? Ich meine, Linker würde dies auch tun, bevor es das lädtlibgstreamer-0.10.so. Aber wird dies zu Problemen führen?

Kann ich meine libs auf installieren?/ system / lib Ordner auf nicht-root-Gerät?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage