我有一个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 和 sections_arm64.txt 中有 arm64 的符号和部分,则:
cat symbols_arm64.txt |grep -e "0x" | awk '{print $2}'| xargs printf "%d\n"|paste -sd+ -|bc cat sections_arm64.txt |grep -e "0x" | awk '{print $2}'| xargs printf "%d\n"|paste -sd+ -|bc
这两个命令都会返回接近15 MB的值。我原本希望这两个命令都会接近27 MB。
是什么导致了缺失的12 MB?
'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 和 sections_arm64.txt 中有 arm64 的符号和部分,则:
cat symbols_arm64.txt |grep -e "0x" | awk '{print $2}'| xargs printf "%d\n"|paste -sd+ -|bc cat sections_arm64.txt |grep -e "0x" | awk '{print $2}'| xargs printf "%d\n"|paste -sd+ -|bc
这两个命令都会返回接近15 MB的值。我原本希望这两个命令都会接近27 MB。
是什么导致了缺失的12 MB?