我有两个静态库,它们似乎有重复的符号(TbxML.O),不会编译。

ld: duplicate symbol _OBJC_METACLASS_$_TBXML in /Users/Hoya/Desktop/SocialSync/include/SMUFLib/deviceLib/libSFCommonLibs.a(TBXML.o) and /Users/Hoya/Desktop/SocialSync/Cauly/libCaulyDevice.a(TBXML.o) for architecture armv6
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang failed with exit code 1

两个库的开发人员都不提供源代码,所以我无法直接编辑代码来修复它。
我能做些什么来解决这个问题而不去烦图书馆的开发人员吗?

最佳答案

第1部分——找出这些符号是否代表同一个对象。
注意:这是OSX特有的。
好的,让我们看看如何看他们的拆卸。
您可以使用otool来执行以下操作:

otool -v -t '/Users/Hoya/Desktop/SocialSync/Cauly/libCaulyDevice.a(TBXML.o)'


otool -v -t '/Users/Hoya/Desktop/SocialSync/include/SMUFLib/deviceLib/libSFCommonLibs.a(TBXML.o)'

检查反汇编,看看它们是否相同,如果相同,那么您就幸运了:-)
如果上面命令的foo.a(bar.o)格式不起作用(不管是什么原因,尽管它应该起作用),您可以通过从这两个命令中删除(tbxml.o)来尝试它,但是您需要做更多的工作。
如果它们是相同的,那么您可以很容易地使用otool+lipo来重建两个.a文件中的一个,以便tbxml.o不在其中
如果他们不一样,那么就要做更多的诡计:)甚至可能不容易。

10-07 19:51