【问题标题】:Avoid symbols conflicts dynamic framework避免符号冲突动态框架
【发布时间】:2015-08-31 13:46:29
【问题描述】:

在网上看到很多符号冲突问题的解决方案symbols collusion problem in static libraries

基本上,当框架使用者项目(例如 A.project)导入框架(例如 B.framework)而 B.framework 导入也在 A.project 中独立使用的第三方框架(c.framework)时,就会出现问题. 在这种情况下,运行时会发生符号串通:

Class 在 和 中都实现了。将使用两者之一。哪一个是未定义的。

我正在寻找几周的时间来了解如何为 作为动态框架的可可触摸框架解决此问题。我看到的所有解决方案都在谈论静态框架。

许多解决方案说最好的方法是将第三方 c.framework 直接链接到 B.framework,而是告诉客户将其链接到项目。

但在这种情况下,我的框架代码无法构建 - 如果我从框架中的“与库链接二进制文件”中删除 c.framework,我开发 B.framework 代码无法编译,说模块和对象丢失。

我怎样才能做到这一点?以某种方式使用第三方框架 C.framework 类而不导出它们或引用而不是链接

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

【问题讨论】:

  • 我们可以用框架的实际名称打印实际的错误吗?
  • 是的,第三方是 GoogleMobileAds.framework,错误是“objc[7114]:在 VeediFramework 和 ...VeediDemoApp.app/VeediDemoApp 中都实现了 GADGestureUtil 类。将使用两者之一。哪个未定义”此返回所有 GoogleMobileAds 对象

标签: ios swift clang cocoa-touch


【解决方案1】:

我这几天也遇到了同样的问题,如果A.project用c.framework导入B.framework,或许我们应该使用pod导入c.framework。

来自苹果的文档:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多