【问题标题】:Size of static libraries generated by XcodeXcode 生成的静态库的大小
【发布时间】:2010-04-24 18:06:32
【问题描述】:

我在 Xcode 中有一个如下所示的项目树:AppProject 依赖于 ObjcWrapper,而 ObjcWrapper 又依赖于 PureCppLib。 ObjcWrapper 和 PureCppLib 是静态库项目。加起来,所有源代码几乎没有达到 15k 行代码,而且,正如预期的那样,生成的二进制文件的大小在发布模式下约为 750Kb,在调试模式下略高于 1Mb。到目前为止,一切顺利。

但是,ObjcWraper.a 和 PureCppLib.a 在任一模式下均超过 6Mb。所以第一个问题是为什么会这样。但更重要的是,如何确保那些静态库不包含部分或全部源代码?

提前致谢!

【问题讨论】:

  • 查找“死代码剥离”。根据我的经验,编译器优化器(发布模式)不会包含您的应用程序未引用的库中的代码。我无法为您进行谷歌搜索,因此请先尝试一下。一旦我得到更好的位置,我会再次回复。
  • 肯尼,死代码似乎不是这里的问题。我称为 PureCppLib 的库,加上适当的包装器,如果编译为动态库,则在 win、win mobile、macosx 和 android ndk 上编译为 500-900Kb(这意味着即使大多数死代码都被链接)。但是在 iPhone 上动态库是不允许的,所以我需要分发一个静态库 - 而 6Mb 看起来不正确。
  • @shaft80: 动态库可以进行死代码剥离(例如,如果使用导出的符号文件,将使用一些链接器进行非常激进的死代码剥离);这肯定是问题所在。
  • 我也有同样的问题。只是出于兴趣,我删除了所有代码和所有依赖库,并且 Obj-C 二进制文件仍然达到 3MB。值得注意的是,这是一个通用库,仅设备为 1.9MB,模拟器构建为 1MB。有谁知道这里发生了什么?

标签: iphone xcode linker static-libraries static-linking


【解决方案1】:

您可能希望构建没有调试符号的静态库。在您分发的配置中找到静态库目标的“生成调试符号”构建设置,并确保它未选中。

【讨论】:

    猜你喜欢
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多