【发布时间】:2015-11-24 04:55:35
【问题描述】:
我有一个 iOS 应用程序,它使用许多不同的静态库和框架(也包括一些第三方)。我希望能够将静态库、框架和应用程序代码的贡献归因于最终的应用程序二进制大小。 我在这里遇到了一个以前问过的类似问题: Find size contributed by each external library on iOS
'fullofsquirells' 的答案是相关的并且解释清楚。但是,使用链接映射文件方法,如果我将所有部分或所有符号的大小相加,我不会得到最终的二进制大小。
更多详情: 我的 iOS 应用程序的最终 ipa 约为 50 MB。未压缩的应用程序有效负载约为 90 MB,包含大约。 50 MB 代码和 40 MB 资源。 50 MB 的二进制代码包含两个对应于 armv7 和 arm64 的二进制切片。我可以使用 'lipo' 获得单独的切片,每个切片的大小大致相似,分别为 23 MB(armv7)和 27 MB(arm64)。
使用链接映射方法,我可以从各个部分以及每个切片的符号中获取大小(请注意,每个切片都有一个单独的链接映射文件)。问题是,如果我将所有部分或所有符号的大小相加,它的总和不会达到该切片的应用程序二进制大小。
假设我在 symbols_arm64.txt 和 section_arm64.txt 中有 arm64 的符号和部分,那么:
cat symbols_arm64.txt |grep -e "0x" | awk '{打印 $2}'| xargs printf "%d\n"|粘贴 -sd+ -|bc
cat section_arm64.txt |grep -e "0x" | awk '{打印 $2}'| xargs printf "%d\n"|粘贴 -sd+ -|bc
这两个返回值都接近 ~15 MB。我预计这两个都将接近 27 MB。
是什么造成了丢失的 12 MB?
【问题讨论】:
-
我面临同样的问题。您是否发现导致丢失 MB 的原因是什么?
-
好的。对我来说,它也是 LINKEDIT 部分。