我有一个libTest.so,在某些设备上没有加载。 logcat绝对没用。
使用arm-linux-androideabi-readelf.exe -d libTest.so
我能够看到libTest.so所需的所有必需库。我将它们全部拉进了本地PC上的同一文件夹。
如何找出缺少的符号以及哪个库?我只有NDK的标准工具集(nm,readelf,objdump等)。哪个工具以及如何使用它以便它解析我的libTest.so和所有依赖的libs并告诉我哪个符号阻止我的lib加载到目标设备上。
答案 0 :(得分:19)
感谢android开发人员。我的功能请求已实施:) 现在我们有ndk-depends,这是一个允许对依赖项进行故障排除的工具。
编辑:它虽然没有完整的符号解析。例如。如果您针对Android-14构建并尝试使用旧Androids中不存在的方法,则此工具不会列出缺少的符号。这部分在ndk-depends中保留为TODO。
答案 1 :(得分:11)
如果您没有让NDK尝试:
readelf --dynamic filename | grep NEEDED
显示elf二进制文件的动态库。
答案 2 :(得分:4)
在Android终端试试这个:
strings /path/to/your/file | grep ^lib
在这里找到:
https://forum.xda-developers.com/showthread.php?t=2737126&page=5
答案 3 :(得分:0)
您可以执行以下操作:
$ /lib/ld-linux.so.2 --list filename
这是因为ldd只是一个shell脚本,就像动态加载器周围的包装器一样。动态加载程序的名称,即ld- {version} .so可能不同。