使用同一个库的两个版本
我正在从事一个iOS项目,其中包括由另一家公司创build的静态库。 该库包括一个旧版本的AFNeworking,我没有任何源文件。
现在我需要使用一个更新(更lessbug)的afneworking版本,但是我不能在项目中包含两个相同的类(当然),因为所有的“重复的符号”。
我明白这是不可能的,取代库中包含的版本,但我怎么能包括旧版本的另一个版本?
在包含在我的项目中之前有一个(简单的)方法来重构整个框架?
谢谢
您将不得不重新打包静态库以删除embedded的AFNetworking文件。
用以下方式打开图书馆:
$ ar x libwhatever.a
并重新打包,包括除AFNetworking对象文件以外的所有文件:
$ ar cr libwhatever.a file1.o ... fileN.o
然后你必须将你的可执行文件与新的AFNetworking静态库链接起来,并希望没有任何API变化会破坏libwhatever.a
的代码。 如果有的话,我怀疑你能做多less事情。
处理这个问题的最好和最正确的方法是联系静态库的创build者,并让他们解决这个问题。 他们可以通过更新AFNetworking的embedded版本,取消对AFNetworking的依赖,或者为AFNetworking的embedded副本添加前缀来解决这个问题。 无论如何,当第三方库embedded一个不同的库时,最后一个可能是个好主意,否则不可能同时使用两个包含相同第三方库的库。
你也可以重构你自己包含的AFNetworking的副本来改变类的名字以得到一个前缀,尽pipe这应该是不必要的,因为静态库供应商应该已经自己做了。
最后,你可以find一个不同的库来完成和你现在的一样的事情,但是这并不embeddedAFNetworking。
恐怕这不容易做到。 很less的环境允许你同时链接到相同框架的两个单独的版本,而Xcode / iOS不是其中之一。
正如我所看到的,你有三个select:
1)链接到他们的库,并使用他们使用的相同版本的AFNetworking。
2)链接到他们的库,并手动加载较新版本的AFNetworking并从中拉出符号。 被警告:这将变得丑陋快速和未来的维护者会想知道你在吸烟。
3)让他们更新他们的图书馆。
在一个方面,我不知道在这里的情况,但总的来说,他们应该提供你的来源。 仅仅提供一个静态(静态!)库并且不知道它在里面做什么是一个非常倒退的做法。 你必须签署一个软件许可协议,而不是保护他们的利益。