如何避免第三方框架之间的重复符号

时间:2012-08-27 20:02:34

标签: ios frameworks llvm

我有点困境。我已经在我的项目中添加了2个框架,所以它恰好都使用了JSONKit。所以当我编译我的项目时,我在这两个框架之间得到了重复的符号。

我不得不将-ObjC -all_load添加到我的构建设置中,否则我会因为某些类别未编译而导致运行时错误(崩溃)。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

链接静态库时,链接器会将所有符号嵌入到最终的二进制文件中。 (这就是为什么它被命名为 static 。)实际上没有好方法去除特定符号,因为源符号和新嵌入符号之间没有区别。即使你可以剥离重复的符号,没有人能确定重复的符号是相同的版本。如果一个库使用了JSONKit库的修改版本,则在将其替换为其他版本时会被破坏。

唯一的方法是在没有重复符号的情况下获取.a文件,或者获取源并自行编译它们。如果lib制造商不是白痴,他们应该提供一些没有嵌入符号的库版本。如果没有这样的东西,我强烈建议不要使用那个lib。因为它不关心符号冲突,这意味着真正的新手意味着它充满了问题。