Carregando bibliotecas compartilhadas que dependem de outras bibliotecas compartilhadas

Problema:

Eu estou construindo o aplicativo Android no Eclipse, que usa lib compartilhadalibgstreamer-0.10.so (GStreamer-android NDK Bundle libs compilado para a plataforma android-8). Fiz nova pastalibs/armeabi na pasta raiz do projeto e colocá-lo lá. Além disso, coloquei todas as outras bibliotecas que vieram com ele (158 delas) na mesma pasta. Se eu colocar isso no meu código de atividade principal:

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

E construir / instalar / executar meu aplicativo no emulador Android-8, isso gera este erro:

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)

Agora,libglib-2.0.so está na mesma pasta quelibgstreamer-0.10.soe por que não está carregado? Eu entendo que o linker tenta carregá-lo de/system/lib elibglib-2.0.so simplesmente não está lá, mas por que não está carregando do local ondelibgstreamer-0.10.so é?

Então eu fui descobrir quais libslibgstreamer-0.10.so depende com este comando:

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

Resultados:

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

Primeiros quatrolibglib-2.0.so, libgobject-2.0.so, libgthread-2.0.so, libgmodule-2.0.so estão todos localizados na mesma pastalibgstreamer-0.10.so está localizado em (/data/data/com.marko.gstreamer_test/lib) no dispositivo.

Solução lógica:

Então, eu tentei carregar essas quatro libs antes de carregarlibgstreamer-0.10.so e funcionou:

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

Minhas perguntas são:

Posso de alguma forma dizer ao vinculador para carregar libs também do local do aplicativo? Como adicionar caminho para alguma variável de ambiente ou algo assim ... semelhante ao PATH no Linux.

Minha solução tem alguns efeitos colaterais ruins? Quero dizer, o linker faria isso também antes de carregar olibgstreamer-0.10.so. Mas isso causará algum problema?

Posso instalar minhas bibliotecas para/ system / lib pasta no dispositivo sem root?

questionAnswers(2)

yourAnswerToTheQuestion