问题描述
我想在 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
应该能让您通过上面的错误消息。
- demoApp.app 是一个应用程序包,它是一个目录层次结构 包含可执行文件、资源等;
- demoApp.ipa 是包含应用程序包的 zip 压缩文件,用于将应用程序上传到 App Store 等情况;和
- demoApp.app.dSYM 是包含应用符号数据的文件系统包(目录层次结构)
如果 ldd 支持 mach-o 和 darwin 加载器格式,我会感到惊讶,而且您似乎已经证明它不......
OTOH,lldb 通常是为了支持在 linux 上读取 mach-o 目标文件而构建的,因此您可以使用它。
直接共享库依赖项存储在 mach-o 二进制文件的“加载命令”中,lldb 将读取它们。因此,只需启动 lldb,为您的 .app 包执行 target create
,image list
将向您显示直接依赖项。 lldb 将遍历所有直接依赖项以找到该 .app 的依赖项的闭包,但要做到这一点,您必须拥有所有直接依赖的库可用(因为它们的依赖项在依赖库的“加载命令”中) .) 我不知道你会如何得到这些。