objective-c - 添加一个大的静态库作为 cocoapod 或直接将所有目标文件添加到生成的二进制文件中,因为 -ObjC 链接器标志

标签 objective-c xcode build linker objective-c-category

问题:与我的库链接会使二进制文件增加 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/

相关文章:

objective-c - iOS9 - UITableViewCellContentView 覆盖了 Cell 中的控件

ios - cocos2d中是否建议不要导入父类或兄弟类的头文件?

objective-c - insertObject 的复杂度 :atIndex:

ios - Xcode 4构建成功,命令行构建失败?

xcode - 如何禁用 Xcode 静态分析 (Clang) 消息?

ios - 在应用程序为 `What' 后更改 `Ready For Sale` s New in This Version`

java - Gradle -compileTestGroovy 无法解析主应用程序类

iphone - 我似乎无法在我的xcode版本上建立存档

iphone - 自定义 UIAlertView iphone

c# - Xamarin:构建时出错 -> 无效的文件路径 'obj\Debug\90\res\views\layouttest.xml'