问题:与我的库链接会为二进制文件增加 2MB。

我正在尝试在 iOS 上分发我自己的静态库。我的库依赖于 KSCrash 和 ProtobufObjc pod。 Pod 在它们自己的目标中编译,然后作为静态库 (libabc.a) 链接到目标应用程序 - 这是使用 cocoapods 的通常过程。有一个标志“-ObjC”传递给链接器,这会导致来自 KSCrash 和 Protobuf 的所有目标文件都被拉入生成的应用程序二进制文件中。我的代码包含仅包含类别的文件,因此我无法删除此标志而不会产生任何后果。拉取这 2 个库会导致应用程序二进制大小增加 1.5MB。如果我在没有 '-ObjC' 的情况下链接,则增加的大小大约减少一半 - 因为 dead_stip 标志,我想,只有在没有 '-ObjC'、'load_all' 等标志时才有效。

问题:如何使“dead_strip”或任何其他机制正常工作,同时又不丢失 Objective-C 类别?

通知 1 :我负担不起剥离符号,因为我需要设备上的符号化。

通知 2 :使用 LITE 标志重新生成 protobuf 代码不会减小大小,我想我必须使用 C++ 版本才能使其工作。

最佳答案

-force_load 链接器标志应该可以解决您的问题。从 Apple documentation :



如果我正确理解您的问题,您应该将 -force_load 指向您的库文件以包含所有类别。我不太明白为什么您可以忍受不从依赖项中加载所有内容,但是帮助您可能不是必需的......

关于objective-c - 由于 -ObjC 链接器标志,添加一个大型静态库作为 cocoapod 或直接将所有目标文件添加到生成的二进制文件中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20347990/

10-12 04:38
查看更多