问题:与我的库链接会使二进制文件增加 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 :
-all_load forces the linker to load all object files from every archive it sees, even those without Objective-C code. -force_load is available in Xcode 3.2 and later. It allows finer grain control of archive loading. Each -force_load option must be followed by a path to an archive, and every object file in that archive will be loaded.
如果我对您的问题的理解正确,您应该将 -force_load
指向您的库存档以包括所有类别。我不太明白为什么你可以忍受不从你的依赖项中加载所有东西,但帮助可能不是必需的......
关于objective-c - 添加一个大的静态库作为 cocoapod 或直接将所有目标文件添加到生成的二进制文件中,因为 -ObjC 链接器标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20347990/