2013-03-20 11 views
18

Ich habe eine libTest.so, die auf einigen Geräten nicht geladen wird. Logcat ist absolut nutzlos. Mit arm-linux-androideabi-readelf.exe -d libTest.so konnte ich alle erforderlichen libs sehen, die libTest.so benötigt. Ich habe sie alle in den gleichen Ordner auf meinem lokalen PC gezogen.ldd gleichwertig auf android

Wie kann ich herausfinden, welche Symbole fehlen und in welcher Bibliothek? Ich habe nur Standard-Tools aus dem NDK (nm, readelf, objdump etc). Welches Tool und wie kann ich meine libTest.so und alle davon abhängigen libs auch parsen und mir sagen, welches Symbol verhindert, dass meine lib auf dem Zielgerät geladen wird.

Antwort

18

Dank Android-Entwickler. Meine Feature-Anfrage wurde implementiert :) Jetzt haben wir ndk-depends, ein Tool, mit dem Abhängigkeiten zu behandeln.

Edit: es tut nicht volle Symbolauflösung obwohl. Z.B. Wenn Sie gegen Android-14 bauen und versuchen, Methoden zu verwenden, die in alten Android-Programmen nicht vorhanden waren, listet dieses Tool keine fehlenden Symbole auf. Dieser Teil wurde als TODO in ndk-depends belassen.

0

Sie können wie etwas tun:

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

Dies liegt daran, LDD nur ein Shell-Skript, das wie ein Wrapper um den dynamischen Loader arbeitet. Der Name des dynamischen Ladeprogramms, d.h. ld- {version} .so kann sich unterscheiden.

+2

Android erscheint '/ system/bin/linker' zu verwenden und nicht'/lib/ld-linux.so'. Jedenfalls kann ich Linker nichts ausgeben –

+7

Ich bekomme nur 'Segmentation fault' beim direkten Aufruf von'/system/bin/linker', egal welche Argumente ich benutze! – markshep

9

Ich lief gerade in das gleiche Problem und wollte das ndk nicht installieren noch den gesamten Quellbaum ergreifen, um herauszufinden, was eine EXE benötigt.

readelf --dynamic filename | grep NEEDED 

zeigt die dynamischen Bibliotheken für einen Elf binär.