2013-03-20 14 views
18

Ho un libTest.so che non si carica su alcuni dispositivi. logcat è assolutamente inutile. Utilizzo di arm-linux-androideabi-readelf.exe -d libTest.so Sono riuscito a visualizzare tutte le librerie richieste di cui libTest.so ha bisogno. Li ho tirati tutti dentro, nella stessa cartella sul mio PC locale.equivalente ldd su android

Come individuare i simboli mancanti e in quale libreria? Ho solo un set standard di strumenti da NDK (nm, readelf, objdump etc). Quale strumento e come posso usare in modo che analizzi anche il mio libTest.so e tutte le librerie dipendenti e mi dice quale simbolo impedisce il caricamento della mia lib sul dispositivo di destinazione.

risposta

18

Grazie agli sviluppatori Android. La mia richiesta di funzionalità è stata implementata :) Ora abbiamo ndk-depends, uno strumento che consente di risolvere le dipendenze.

Modifica: non esegue la risoluzione completa dei simboli. Per esempio. se costruisci contro Android-14 e cerchi di usare metodi che non esistevano nei vecchi Androidi, questo strumento non elenca i simboli mancanti. Questa parte è stata lasciata come TODO in ndk-dipende.

0

Si può fare qualcosa di simile:

$ /lib/ld-linux.so.2 --list filename 

Questo perché LDD è solo uno script di shell che funziona come un wrapper per il caricatore dinamico. Il nome del caricatore dinamico, ad esempio, ld- {versione} .so potrebbe essere diverso.

+2

Android sembra usare '/ system/bin/linker' e non'/lib/LD-linux.so'. Ad ogni modo non riesco a far sì che il linker emetta qualcosa –

+7

Ho appena ricevuto l'errore 'Segmentation' quando invoco'/system/bin/linker' direttamente, indipendentemente dagli argomenti che uso! – markshep

9

Mi sono solo imbattuto nello stesso problema e non volevo installare il ndk né prendere l'intero albero dei sorgenti per scoprire che cosa sono gli exe.

readelf --dynamic filename | grep NEEDED 

visualizza le librerie dinamiche per un file binario elfo.