【问题标题】:ldd equivalent on androidldd 在 android 上等效
【发布时间】:2013-03-10 04:05:38
【问题描述】:

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

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

【问题讨论】:

  • /toolchains/llvm/prebuild//bin/-strings | grep ^lib | grep 所以

标签: android android-ndk ldd readelf


【解决方案1】:

如果您没有 NDK,请尝试:

readelf --dynamic filename | grep NEEDED

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      感谢安卓开发者。我的功能请求已实现:) 现在我们有了ndk-depends,这是一个可以解决依赖关系问题的工具。

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

      【讨论】:

        【解决方案4】:

        你可以这样做:

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

        这是因为 ldd 只是一个 shell 脚本,它的工作方式类似于动态加载器的包装器。动态加载器的名称,即 ld-{version}.so 可能不同。

        【讨论】:

        • Android 似乎使用 /system/bin/linker 而不是 /lib/ld-linux.so 。无论如何我无法让链接器输出任何东西
        • 无论我使用什么参数,当我直接调用/system/bin/linker 时,我只会得到Segmentation fault
        猜你喜欢
        • 1970-01-01
        • 2013-05-07
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        • 2013-06-13
        • 1970-01-01
        • 2016-01-15
        • 1970-01-01
        相关资源
        最近更新 更多