I have a libTest.so that does not load on some devices. logcat is absolutely useless.
Using arm-linux-androideabi-readelf.exe -d libTest.so
I was able to see all required libs that libTest.so needs. I pulled them all in, into the same folder on my local PC.
How can I find out which symbols is missing and in which library? I have only standard set of tools from the NDK (nm, readelf, objdump etc). Which tool and how can I use so that it parses my libTest.so and all dependent libs as well and tells me which symbol prevents my lib from loading on the target device.
Thanks to android developers. My feature request was implemented :) Now we have ndk-depends, a tool that allows to troubleshoot dependencies.
Edit: it doesn't do full symbol resolution though. E.g. if you build against Android-14 and try to use methods that didn't exist in old Androids, then this tool won't list missing symbols. This part was left as a TODO in ndk-depends.
If you don't have the NDK try doing:
readelf --dynamic filename | grep NEEDED
to display the dynamic libraries for an elf binary.
At Android terminal try this:strings /path/to/your/file | grep ^lib
Found here:
https://forum.xda-developers.com/showthread.php?t=2737126&page=5
You can do something like:
$ /lib/ld-linux.so.2 --list filename
This is because ldd is just a shell script that works like a wrapper around the dynamic loader. The name of the dynamic loader, i.e., ld-{version}.so might differ.
来源:https://stackoverflow.com/questions/15534104/ldd-equivalent-on-android