我遇到一个问题,应用程序使用两个动态框架,这两个框架都链接到同一个静态库。这两个框架都在其二进制文件中包含静态库的符号。这会导致应用程序中出现重复的符号。
是否可以将动态框架链接到静态库(并在动态框架内调用静态库的类和方法),从而将静态库中的符号从动态框架的二进制文件中排除?
我这样做的希望是两个动态框架的二进制文件都将排除静态库的符号。我将使应用程序负责直接链接到静态库。
假设您有两个名为
DF1
和 DF2
的动态框架,它们都链接到名为 SL
的同一个静态库。
我找不到一种方法来构建
DF1
和 DF2
,使其链接到 SL
,同时从二进制文件中排除 SL
的符号。
迄今为止我能想到的最佳解决方案如下:
DF
– 链接到 SL
。1DF1
和 DF2
以链接到 DF
而不是 SL
。2DF
以及 DF1
和 DF2
。3认识可合并库演讲的可合并库的好处部分提供了希望。在那次演讲中,演讲者说:
...合并时,链接器可以在所有库中删除重复内容,例如字符串。例如,它删除了冗余符号引用、Objective-C 选择器和 obj_msgsend 存根...我将尝试可合并的库并更新我的答案以确认或否定它是否解决了手头的问题。
1
SL
的符号将在
DF
的二进制中。
DF
的符号不会出现在
DF1
和
DF2
的二进制文件中。
SL
获取
DF
的符号。