如何在 Linux 中打印 ios 应用程序的共享依赖项

问题描述

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

但是我在执行命令时遇到以下错误。 1) ldd ./demoApp.app 不是普通文件 2) ldd ./demoApp.ipa 不是动态可执行文件 3) ldd ./demoApp.app.dSYM/Contents/Resources/DWARF/demoApp 不是动态可执行文件

我应该向 ldd 传递什么参数来打印依赖项。

解决方法

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

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

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

OTOH,lldb 通常是为了支持在 linux 上读取 mach-o 目标文件而构建的,因此您可以使用它。

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