эквивалент ldd на android

у меня есть libTest.так что не загружается на некоторых устройствах. logcat абсолютно бесполезен. Используя arm-linux-androideabi-readelf.exe -d libTest.so Я смог увидеть все необходимые libs, которые libTest.так нужно. Я вытащил их все в одну папку на своем локальном ПК.

Как я могу узнать, какие символы отсутствуют и в какой библиотеке? У меня есть только стандартный набор инструментов из NDK (nm, readelf, objdump и т. д.). Какой инструмент и как я могу использовать, чтобы он анализировал мой libTest.так и все зависимые libs, а также и говорит мне какой символ предотвращает загрузку моего lib на целевое устройство.

4 ответов


благодаря разработчикам android. Мой запрос был реализован :) Теперь у нас есть ndk-зависит инструмент для устранения зависимостей.

Edit: он не делает полное разрешение символа, хотя. Например. если вы создадите Android-14 и попытаетесь использовать методы, которых не было в старых андроидах, этот инструмент не будет перечислять отсутствующие символы. Эта часть была оставлена как TODO в ndk-depends.


Я просто столкнулся с той же проблемой и не хотел устанавливать ndk или захватывать все исходное дерево, чтобы узнать, что exe neeeds.

readelf --dynamic filename | grep NEEDED

отображает динамические библиотеки для двоичного файла elf.


на терминале Android попробуйте следующее:
strings /path/to/your/file | grep ^lib Найти здесь: https://forum.xda-developers.com/showthread.php?t=2737126&page=5


вы можете сделать что-то вроде:

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

это потому, что ldd - это просто сценарий оболочки, который работает как оболочка вокруг динамического загрузчика. Имя динамического загрузчика, т. е. ld - {version}.так может отличаться.