3

我有兩個似乎有重複符號(TBXML.o)的靜態庫,並且不會編譯。在Xcode中有兩個重複符號的靜態庫

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 

這兩個庫的開發者都沒有提供源代碼,所以我沒有辦法直接編輯代碼來修復它。

有什麼我可以做的,以解決這個問題而不嘮叨圖書館開發者?

+0

可能, 首先,你知道TBXML是否都是IDENTICAL?那就是他們提供了相同的功能......如果是這樣的話,你可以很容易地重建檔案來刪除其中的一個。 –

+0

由於我沒有源代碼,我不知道。 :S有反正我能找出來嗎? –

回答

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 +脂重建兩個.a文件之一,以TBXML.o是不是在它

情況下,他們是不一樣的,然後一要做更多的詭計:)可能不容易做到。

+1

我已經完成了你的建議,事實證明它們完全不同。我試圖使用的兩個庫的開發人員應該更加考慮如果他們要修改和編譯開源庫(在這種情況下爲TBXML)以便重新分發。我打算接受這個答案,並通過電子郵件向開發人員講解這個問題。謝謝。 –

+0

@JihoKang對不起,我不能幫你進一步..你是對的。如果他們打算使用開源庫,那麼他們應該提供其庫的動態鏈接版本,或分開提供開源庫,以便可以交叉鏈接。 –