2011-08-03 76 views
4

我正在開發一個iPad應用程序,其中包含2個第三方靜態庫。這兩個庫中的對象文件的名稱是相同的。在構建應用程序我得到如何在其中包含具有相同名稱的靜態庫的OBJECT文件?

「蘋果馬赫-O(ID)錯誤」

,因爲目標文件的這些2個庫相同的名字。 如何解決這個問題?

錯誤的樣子:

ld: duplicate symbol _T_strcpy in /Users/indiait-supportservices/Desktop/untitled folder/Universal/lib/simulator/libSecurIDLib.a(mem.o) and /Users/indiait-supportservices/Library/Developer/Xcode/DerivedData/ReceiverForiOS-aqpprpcivvjjadbsutqqmtjsoczk/Build/Intermediates/ReceiverForiOS.build/Debug-iphonesimulator/myApp iPad.build/Objects-normal/i386/pdcrypte2.o for architecture i386 

collect2: ld returned 1 exit status 

Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-g++-4.2 

failed with exit code 1. 
+0

在我看來,它是一個重複的符號,而不是重複的對象文件名。 –

+0

@丹尼爾:是丹尼爾它是一個重複的符號。你能告訴我如何解決這個問題嗎? – Micheal

+0

等待解決方案。Plz任何人都有一些建議? – Micheal

回答

0

你構建一個架構?如果您正在構建多個體繫結構並使用鏈接器標記,則會中斷鏈接器忽略爲多個體繫結構定義的符號的能力。作爲一個測試,嘗試爲armv6構建,看看錯誤是否消失。

有一個很好的博客文章here和一個類似的問題討論here

最後,您可以添加以下env var來調試覆蓋類別的問題: OBJC_PRINT_REPLACED_METHODS=YES。這將記錄哪些方法名稱已被類別覆蓋,以防萬一這是問題。

0

它看起來像你有兩個模塊定義相同的功能,一個在libSecurIDLib.a(mem.o)pdcrypte2.o。這些應該在它們自己的命名空間(C++)中,或者它們應該加前綴以便它們不會碰撞(C)。

work arounds如果這是不可能的,但它更好地安全地命名的東西。

相關問題