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

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

Ответ 4

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

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

Это связано с тем, что ldd - это всего лишь оболочка script, которая работает как обертка вокруг динамического загрузчика. Имя динамического загрузчика, т.е. Ld- {version}.so, может отличаться.