【发布时间】:2017-12-07 17:35:52
【问题描述】:
某些 iOS 9 设备似乎因我从 Xcode 中非常基本的崩溃报告中收到的错误消息而崩溃
dyld:格式错误的 mach-o:加载命令大小 (16464) > 16384
不幸的是,这就是我得到的所有信息。我什至无法在本地调试或重现。 谁能在这里提示我正确的方向?
它发生在更新我的 Cocoapods 之后,所以我猜其中有一个(或它们的依赖项)行为不端。
在对我的 mach-O 二进制文件进行一些调查后,我发现 sizeofcmds 确实是 16464。
如果我理解正确的话,加载命令的大小限制似乎是 16384,有人可以确认吗?
这是否意味着我应该删除 dylib 并且一切都应该没问题?
【问题讨论】:
-
你能在这里列出依赖关系吗?
-
本周也遇到了这个问题。讨厌的问题。奇怪的是,我发现其他提到的限制是 32768(两倍)。
-
让我们一起解决这个问题。在您导出的可执行文件上运行 otool -l 并查看您的体系结构的 sizeofcmds。另外请告诉我您使用的架构,我使用 armv7 和 arm64(对于军队 64,命令的大小超过了“限制”
-
是的,我查看了 otool 的输出,它与 dyld 的错误消息相匹配。我刚刚注意到您在谈论设备,而我正在模拟器上处理它(在 Sierra 上运行),所以我的拱门是 x86-64。不过,我认为这是 iOS 9 上的 dyld,因为 10.x 设备和 sim 工作正常。仍然不确定该怎么做。一位同事一直在调查,但我不知道她是否发现了什么。
-
一些加载命令包含调试器的数据,您可以在链接器中尽量减少发出的调试内容。验证二进制文件的便捷工具是
MachOView。您还可以查看我在LCs 的最小集合上的帖子,这是二进制文件在此处工作所必需的:stackoverflow.com/a/42399119/5329717