эквивалент 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}.так может отличаться.