【问题标题】:How do I can print shared dependencies of ios app in Linux如何在 Linux 中打印 ios 应用程序的共享依赖项
【发布时间】:2021-04-23 16:30:07
【问题描述】:

我想在 linux 脚本中打印 ios 应用程序的共享对象依赖项以进行崩溃解析。

但是在执行命令时出现以下错误。 1) ldd ./demoApp.app 不是常规文件 2) ldd ./demoApp.ipa 不是动态可执行文件 3) ldd ./demoApp.app.dSYM/Contents/Resources/DWARF/demoApp 不是动态可执行文件

我应该将什么参数传递给 ldd 以打印依赖项。

【问题讨论】:

    标签: ios linux lldb ldd


    【解决方案1】:

    我没有使用 ldd(我不使用 Linux),但我会从 man ldd 开始确定合适的参数。此外,ldd ./demoApp.app/demoApp 应该会让您摆脱上面的错误消息。

    1. demoApp.app 是一个应用包,它是一个目录层次结构 包含可执行文件、资源等;
    2. demoApp.ipa 是一个包含 app bundle 的 zip 压缩文件,用于将 app 上传到 App Store 等情况;和
    3. demoApp.app.dSYM 是一个文件系统包(目录层次结构),其中包含应用的符号数据

    【讨论】:

    • ldd ./demoApp.app/demoApp 也给出了错误,因为它不是动态可执行文件
    • ldd 是否适用于 Mach-O 可执行文件?如果不是,那么这可能是导致此错误的原因。
    【解决方案2】:

    如果 ldd 支持 mach-o 和 darwin 加载器格式,我会感到惊讶,而且您似乎已经证明它不...

    OTOH,lldb 一般是为支持在 linux 上读取 mach-o 目标文件而构建的,所以你可以使用它。

    直接共享库依赖项存储在 mach-o 二进制文件的“加载命令”中,lldb 将读取这些内容。所以只需启动 lldb,为您的 .app 包执行target create,image list 将向您显示直接依赖项。 lldb 将遍历所有直接依赖项以找到该 .app 依赖项的闭包,但要做到这一点,您必须使所有直接依赖的库都可用(因为它们的依赖项位于依赖库的“加载命令”中) .) 我不知道你是怎么弄到这些的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-06
      • 2019-07-14
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多