预链接静态库的ios项目

pre-link static libraries for ios project

本文关键字:ios 项目 链接 静态      更新时间:2023-10-16

我有一个大型iOS项目,它由几个(大约20-30个)静态库组成,这些库链接在一起形成最终的可执行文件。有些组件是独立于平台的(纯c++),有些是特定于ios的(Obj-C/obj - c++)。c++模板被大量使用,因此每个目标文件都包含了大量带有模糊链接的符号。问题是这些符号只在最终可执行文件的链接期间合并,而不是在创建静态库时合并。每个库包含大量重复的符号(6-60个克隆)。所以应用程序的最终链接需要几分钟。在调试和做一些小更改时,这变得非常烦人。

是否有一种方法来执行与每个库模糊链接的符号合并?

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

当然,能够调试生成的应用程序是必须的。

您可以将您的静态库对象预链接为单个对象,也可以将其他静态库预链接为一个对象。它实际上会用链接器链接对象(就像在动态库中一样)。

  1. 在你的单一库(主要的)去构建设置,并在链接部分找到Perform Single-Object Prelink。切换到Yes
  2. 在预链接库中,你可以指定你想要包含的其他库。这里不仅需要输入文件名,还需要输入完整的文件名。如果其他库也来自您的项目,那么您可以使用$(CONFIGURATION_BUILD_DIR)变量。所以如果你有库foo,那么它将是$(CONFIGURATION_BUILD_DIR)/libfoo.a
  3. 你可以在单对象预链接标志
  4. 中添加额外的标志
  5. 如果你想去掉局部符号,那么请确保你将部署后处理设置为Yes,因为默认情况下静态库不会被去掉。