我在符号冲突问题symbols collusion problem in static libraries
中看到了许多在线解决方案基本上问题发生在框架消费者项目(比如A.project)导入框架(比如B.framework)而B.framework导入第三方框架(c.framework)时,它也在A.project中独立使用。 在这种情况下,符号勾结将在运行时发生:
类在和中实现。将使用两者之一。哪一个未定义。
我正在寻找几周如何解决可可触摸框架(动态框架)的问题。我看到的所有解决方案都在谈论静态框架。
许多解决方案都说最好的方法是不将第三方c.framework直接链接到B.framework,但告诉客户将其链接到项目。
但是在这种情况下,我的框架代码不会构建 - 如果我从框架中删除“链接二进制文件”中的c.framework,我开发了B.framework,代码无法编译说模块和对象丢失。
我怎样才能实现这一目标?以某种方式使用第三方框架C.framework类而不导出它们或引用而不是链接
我真的需要这方面的技术帮助
答案 0 :(得分:0)
我最近遇到了同样的问题,也许我们应该使用pod来导入c.framework以防A.project导入带有c.framework的B.framework。
来自apple的doc:
注意:在编译时,链接时或运行时不会发现动态共享库之间的名称冲突。 dlsym函数使用字符串匹配来查找符号。如果两个库对函数使用相同的名称,则动态加载器返回与给予dlsym的符号名称匹配的第一个库。