【发布时间】: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