gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:26 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com