gpt4 book ai didi

c++ - ios项目的预链接静态库

转载 作者:可可西里 更新时间:2023-11-01 05:04:42 25 4
gpt4 key购买 nike

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

有没有办法对每个库执行模糊链接的符号合并?

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

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

最佳答案

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

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

关于c++ - ios项目的预链接静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14259405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com