避免符号冲突动态框架

时间:2015-08-31 13:46:30

标签: ios swift clang cocoa-touch

我在符号冲突问题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类而不导出它们或引用而不是链接

我真的需要这方面的技术帮助

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题,也许我们应该使用pod来导入c.framework以防A.project导入带有c.framework的B.framework。

来自apple的doc:

注意:在编译时,链接时或运行时不会发现动态共享库之间的名称冲突。 dlsym函数使用字符串匹配来查找符号。如果两个库对函数使用相同的名称,则动态加载器返回与给予dlsym的符号名称匹配的第一个库。

https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryUsageGuidelines.html

相关问题