23

我有一个 libTest.so 无法在某些设备上加载。logcat 绝对没用。使用arm-linux-androideabi-readelf.exe -d libTest.so我能够看到 libTest.so 需要的所有必需库。我将它们全部拉入本地 PC 上的同一个文件夹中。

如何找出缺少哪些符号以及在哪个库中?我只有 NDK 的标准工具集(nm、readelf、objdump 等)。我可以使用哪个工具以及如何使用它来解析我的 libTest.so 和所有依赖库,并告诉我哪个符号阻止我的库加载到目标设备上。

4

4 回答 4

20

感谢安卓开发者。我的功能请求已实现 :) 现在我们有了ndk-depends,这是一个允许对依赖项进行故障排除的工具。

编辑:虽然它不做完整的符号解析。例如,如果您针对 Android-14 构建并尝试使用旧 Android 中不存在的方法,则此工具不会列出丢失的符号。这部分在 ndk-depends 中作为 TODO 留下。

于 2013-10-05T22:40:29.043 回答
18

如果您没有 NDK,请尝试执行以下操作:

readelf --dynamic filename | grep NEEDED

显示精灵二进制文件的动态库。

于 2016-10-19T11:41:15.217 回答
5

在 Android 终端试试这个:
strings /path/to/your/file | grep ^lib 在这里找到: https ://forum.xda-developers.com/showthread.php?t=2737126&page=5

于 2017-02-24T22:13:37.607 回答
0

您可以执行以下操作:

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

这是因为 ldd 只是一个 shell 脚本,它就像动态加载器的包装器一样工作。动态加载程序的名称,即 ld-{version}.so 可能不同。

于 2013-08-15T17:27:46.043 回答