【问题标题】:static library has big size静态库很大
【发布时间】:2012-07-28 05:00:36
【问题描述】:

我借助 template 构建了通用静态库

问题是我的库 libWrapper.a 的大小为 1.3 mb??? :0 而我的源代码有 130 kb。

如何减小静态库的大小?

其他奇怪的东西-

每个库都具有相同的大小 - 1.3 mb。我认为通用(胖)库应该有更大的尺寸。

【问题讨论】:

  • 你是在调试还是发布模式下构建你的库?
  • 两者...并且它们的大小相同(
  • Release 模式下是否将 Strip Debug Symbols during Copy 标志设置为 Yes?
  • 是的,它设置为 YES 用于发布
  • 您的库是否静态链接到任何其他库?请记住,您的二进制文件包含 3 种不同的架构,这意味着您的库中可能包含的静态链接库代码是代码的 3 倍。

标签: objective-c ios build static-libraries


【解决方案1】:

还要确保在构建设置中将 Generate Debug Symbols 设置为 NO。这可以将静态库的大小减少大约 30%。

【讨论】:

  • 但它仅将大小减小了 10% :(
  • 在此和“复制期间剥离调试符号”设置为 YES 之间,我的 fat lib 大小减少了 65%。
【解决方案2】:

在终端运行

strip -x [youStaticlib.a]

说明

For dynamic shared libraries, the maximum level of stripping is usually
 -x (to remove all non-global symbols).

如果你想知道剥离其他参数,在终端运行

man strip

【讨论】:

    【解决方案3】:

    你不能。静态库包括它们在可执行文件中以框架形式引用的所有代码。

    【讨论】:

    • 因为他们的链接器设置不包括这么多,是的,我确定。
    • 这是不正确的。静态库只是 .o 文件的存档。它们包含来自框架的代码。框架是动态链接的。
    • 这就是静态库 - 因此名称为静态。 Apple 不支持静态链接到 iOS 框架,但如果您静态链接到第 3 方框架,它们的所有代码都将静态链接到您的应用程序可执行文件中。
    • Apple 也不建议将静态链接用于第三方或其他方式。
    • @user490696 我很想知道您在哪里看到 Apple 不推荐静态链接?人们还会如何包含闭源分析库甚至开发人员自己编写的库?
    猜你喜欢
    • 2015-08-07
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多