Ldd-эквивалент на Android
У меня есть libTest.so, который не загружается на некоторых устройствах. logcat абсолютно бесполезен.
Используя arm-linux-androideabi-readelf.exe -d libTest.so
, я смог увидеть все необходимые библиотеки libtest.so. Я втянул их все в одну папку на локальном ПК.
Как узнать, какие символы отсутствуют и в какой библиотеке? У меня есть только стандартный набор инструментов из NDK (nm, readelf, objdump и т.д.). Какой инструмент и как я могу использовать, чтобы он анализировал мои libTest.so и все зависимые библиотеки, а также сообщает мне, какой символ запрещает загрузку моей библиотеки на целевом устройстве.
Ответы
Ответ 1
Спасибо разработчикам Android. Мой запрос функции был реализован:)
Теперь мы ndk-depends - инструмент, который позволяет устранять проблемы.
Изменить: он не выполняет полное разрешение символа. Например. если вы создаете против Android-14 и пытаетесь использовать методы, которых не было в старых андроидах, тогда этот инструмент не будет перечислять недостающие символы. Эта часть была оставлена как TODO в зависимости от ndk.
Ответ 2
Если у вас нет NDK, попробуйте выполнить:
readelf --dynamic filename | grep NEEDED
отобразить динамические библиотеки для двоичного файла эльфа.
Ответ 3
В терминале Android попробуйте следующее:
strings /path/to/your/file | grep ^lib
Найдено здесь:
https://forum.xda-developers.com/showthread.php?t=2737126&page=5
Ответ 4
Вы можете сделать что-то вроде:
$ /lib/ld-linux.so.2 --list filename
Это связано с тем, что ldd - это всего лишь оболочка script, которая работает как обертка вокруг динамического загрузчика. Имя динамического загрузчика, т.е. Ld- {version}.so, может отличаться.