为ios项目预链接静态库

我有一个很大的iOS项目,由几个(大约20-30个)静态库组成,这些静态库链接在一起成为最终的可执行文件。 一些组件是平台无关的(纯C ++),一些是特定于iOS的(Obj-C / Obj-C ++)。 C ++模板被大量使用,所以每个目标文件都包含很多符号模糊的链接。 问题是这些符号仅在最终可执行文件链接期间合并,而不是在制作静态库时合并。 每个库包含大量重复的符号(6-60克隆)。 所以应用程序的最终连接需要几分钟的时间。 这在debugging和做一些小的改变时变得非常恼人。

有没有办法对每个图书馆进行模糊联系的符号合并?

我知道,这是使用dynamic库时自动完成的。 通过一些黑客行为(http://sumgroup.wikispaces.com/iPhone_Dynamic_Library),可以为iOS构builddynamic库。 有没有办法链接dylib的静态(链接到一个单一的可执行文件)?

当然,能够debugging结果的应用程序是必须的。

您可以将静态库对象预先链接到一个,也可以将其他静态库预先链接到一个。 它将实际上链接对象(几乎就像在dynamic库中)。

  1. 在您的单个库(主要)中,转到“生成设置”, Perform Single-Object Prelink在“链接”部分中find“ Perform Single-Object Prelink链接”。 切换到是
  2. 在Prelink库中,您可以指定要包含的其他库。 在那里,你不仅需要input姓名,还需要input完整的文件名。 如果其他库也来自您的项目,那么您可以使用$(CONFIGURATION_BUILD_DIR)variables。 所以如果你有库foo,那么它将是$(CONFIGURATION_BUILD_DIR)/libfoo.a
  3. 您可以在单对象预链接标志中添加其他标志
  4. 如果要删除本地符号,请确保将“部署后处理”设置为“是”,因为默认情况下不会除去静态库。