我正在处理链接几个静态库的iOS应用程序。挑战在于,这些链接库定义了不同实现的相同方法名称。奇怪的是,我没有得到任何duplicate symbol definition
错误;但毫不奇怪,我最终只能访问该方法的一个实现。在静态iOS库中重写符号
更清楚,说我有力霸和libB,他们都定义一个全局的C法称为FUNC1()
当我链接都力霸和libB,做出FUNC1(通话),它解析到libA或libB的实现,没有任何编译警告。但是,我需要能够分别访问libA的func1()和libB的func1()。
There's a similar SO post,解释它如何可以在C完成(通过符号重命名),但不幸的是,我发现,objcopy
工具不会对ARM架构(因此iPhone)工作。
(我将它提交到App Store,因此,动态链接不是一个选项)
如果你有任何库的源代码,那么解决方案是显而易见的。或者,你可以使用'lipo'将两个库打包成一个,如果我的内存不足,应该只保留其中一个符号。 – 2013-03-11 18:09:36
谢谢@ RichardJ.RossIII,但我没有源代码,不确定你的建议会有帮助,因为我想分开保存这些符号,我需要它们两个,我不想将它们还原为一个符号 – 2013-03-11 19:19:02
我会比如说使用'dlopen'和'dlsym'动态地分别加载符号,但不幸的是,现在苹果禁止使用这些符号,这将不起作用。我不是''.a'文件结构的专家,但我有一种感觉,可以通过十六进制编辑器手动执行此操作。让我尝试一下,我会看看我能否帮助你。 – 2013-03-11 19:24:37