假设我创建了一个iOS应用程序。我包括一个静态库。我创建了一个在静态库中定义和实现的类的对象。该对象不使用库中定义的其他类。我构建的应用程序中是否存在所有静态库?我们的想法是,许多静态库包含未使用的代码,并且不需要存在。
我相信有一些标志可以帮助确定行为 - 如果有人能说明这是如何运作的,我当然会很感激。
答案 0 :(得分:1)
静态库是目标文件的存档。如果您链接到静态库libfoo.a
那么
默认情况下,链接器将链接到您的最终可执行文件,并且只链接到libfoo.a
中的那些目标文件
需要提供程序引用的公共符号的定义。
更具体地说,如果链接器在给定的位置找到所请求的库(通过选项-lfoo
)
指向要链接的目标文件和库的命令行序列,然后它将
从存档中提取并链接到可执行文件中提供的存档中的每个目标文件
任何符号的定义,直到链接中的那一点仍未定义。
这样,未使用的公共符号的定义可以冗余地链接到 你的程序,但只有在目标文件中找到它们(无论是独立的还是成员的 一个不完全多余的图书馆。
如果你不想容忍那些潜在的裁员,那么就结合了 编译器和链接器选项可以消除它们:请参阅this answer