为什么最终二进制文件的大小会比静态库的大小小得多?

时间:2012-03-29 21:39:12

标签: objective-c c ios build static-libraries

这是一个iOS问题。

我构建了一个静态库(iOS中的框架),然后将其包含在应用程序中。结果二进制(500kb)的大小小于静态库(6mb)的大小。这是如何运作的?我对静态库的理解是静态库包含在最终的二进制文件中

2 个答案:

答案 0 :(得分:24)

因为您没有使用库的所有功能。归档类型.a的静态库是.o目标文件的集合,并且链接时仅包含程序中所需的目标文件。

答案 1 :(得分:3)

每当您静态链接可执行文件时,链接器可以继续并解析所有符号名称(即将它们映射到地址),因为 all 它将知道您现在已经提供给链接器的符号(以.o个文件和.a个库的形式,它们实际上只是.o个文件的集合。如果有不存在的名称,则会出现链接错误(这与动态链接不同,您可以在运行时加载另一个库)。在您的情况下,您有可执行文件未引用的额外符号。由于链接器将这些符号称为未使用,因此只需从可执行输出中删除它们。因此,在这种情况下,您的可执行文件将小于输入库。