【问题标题】:Objective-C / iOS - Resolve duplicated symbols inside a static libraryObjective-C / iOS - 解决静态库中的重复符号
【发布时间】:2016-10-10 12:16:25
【问题描述】:

我的iOS项目使用了一个第三方(非开源)静态库(即libA.a),而这个libA.a使用了CocoaLumberjack,它直接将CocoaLumberjack编译成自己,以及CocoaLumberjack的版本不清楚。

现在我也想使用CocoaLumberjack来跟踪我的程序中的日志,如果我通过CocoaPods安装CocoaLumberjack会导致重复符号错误。

问题:

  1. 有没有办法隐藏 libA.a 中的 CocoaLumberjack 符号,这样 Xcode 就不会报告符号错误?

  2. 还有其他可以推荐的file logger库吗?

现在我正在查看libA.a中的符号,将其与CocoaLumberjack的来源进行对比,我发现CocoaLumberjack使用的版本libA.a已关闭,我下一步应该只包含头文件CocoaLumberjack 在我的项目中。它应该可以工作,但我不喜欢这种方式。

【问题讨论】:

  • 只是一个更新。最后我们让 libA.a 的作者从他们的库中删除旧版本的 CocoaLumberjack。

标签: ios objective-c xcode logging cocoalumberjack


【解决方案1】:

您可以从静态库中解压目标文件,然后在没有 CocoaLumberpack 目标文件的情况下重新打包。

类似:

$ ar x libA.a
$ rm cococaLumberjackFile*.o      # Whatever they are called
$ ar cr libA.a *.o

如果静态库是 fat(包含多个 CPU 架构),那么这将变得非常更加困难,并且涉及lipo 和很多痛苦。

编辑:继续在您的代码中使用 CocoaLumberjack 并与 libA.a 链接。它将为第 3 方库 CocoaLumberjack 提供对象。

【讨论】:

  • 看起来很酷。但是,libA.a 也有可能正在使用CocoaLumberjack,如果我删除它们,我怀疑libA.a 代码是否可以与最新版本的CocoaLumberjack 一起使用(因为方法的各种变化等) .但是如果我能找出使用了哪个版本的CocoaLumberjacklibA.a,那么我可以使用你的方法将CocoaLumberjack的源代码包含到我的项目中。
  • 试一试并找出答案。
  • 嗯.. 不起作用。它说ar: libA.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it) . ar: libA.a: Inappropriate file type or format
猜你喜欢
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 2017-10-03
相关资源
最近更新 更多