Ładowanie współdzielonych bibliotek zależnych od innych współdzielonych bibliotek

Problem:

Buduję aplikację na Androida w Eclipse, która używa współdzielonej bibliotekilibgstreamer-0.10.so (GStreamer-android NDK Bundle libs skompilowane dla platformy Android-8). Zrobiłem nowy folderlibs/armeabi w folderze głównym projektu i umieść go tam. W tym samym folderze umieściłem także wszystkie inne dołączone do niego biblioteki (158 z nich). Jeśli umieścisz to w moim głównym kodzie aktywności:

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

I zbuduj / zainstaluj / uruchom moją aplikację na emulatorze Android-8, zgłasza ten błąd:

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)

Teraz,libglib-2.0.so znajduje się w tym samym folderze colibgstreamer-0.10.soi dlaczego nie jest załadowany? Dostaję, że linker próbuje go załadować/system/lib ilibglib-2.0.so po prostu go nie ma, ale dlaczego nie ładuje go z miejsca, w którym się znajdujelibgstreamer-0.10.so jest?

Poszedłem więc odkryć, które bibliotekilibgstreamer-0.10.so zależy od tego polecenia:

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

Wyniki:

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

Pierwsze czterylibglib-2.0.so, libgobject-2.0.so, libgthread-2.0.so, libgmodule-2.0.so wszystkie znajdują się w tym samym folderzelibgstreamer-0.10.so znajduje się w (/data/data/com.marko.gstreamer_test/lib) na urządzeniu.

Logiczne rozwiązanie:

Próbowałem więc załadować te cztery biblioteki przed załadowaniemlibgstreamer-0.10.so i zadziałało:

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");
}

Moje pytania to:

Czy mogę w jakiś sposób powiedzieć linkerowi, aby ładował biblioteki również z lokalizacji aplikacji? Jak dodać ścieżkę do jakiejś zmiennej środowiskowej lub coś ... podobnego do PATH na Linuksie.

Czy moje rozwiązanie ma jakieś złe skutki uboczne? To znaczy, linker zrobiłby to również przed załadowaniemlibgstreamer-0.10.so. Ale czy to spowoduje jakieś problemy?

Czy mogę zainstalować moje biblioteki/ system / lib folder na urządzeniu bez uprawnień?

questionAnswers(2)

yourAnswerToTheQuestion