两个静态库,在Xcode中有重复的符号

时间:2011-12-04 18:05:46

标签: objective-c xcode compilation shared-libraries static-linking

我有两个静态库,似乎有重复的符号(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 个答案:

答案 0 :(得分:4)

第1部分 - 确定符号是否代表相同的对象。

注意:这是OS X特定的。

好的,让我们来看看如何查看他们的反汇编。

您可以使用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不在其中

如果它们不相同,那么必须要做更多的诡计:)甚至可能不容易。