2010-03-16 448 views
5

我有一個Xcode項目,它有一個「主」靜態庫目標,包括/鏈接到其他Xcode項目的一堆其他靜態庫。構建armv6和armv7的iPhone靜態庫,其中包含另一個靜態庫

構建「Optimized(armv6 armv7)」的主庫目標時,在CreateUniversalBinary步驟的最後階段發生錯誤。對於由主庫包括在庫中的每個的.o文件時,報告了以下錯誤(例如,FBConnectGlobal.o文件):

warning for architecture: armv6 same member name (FBConnectGlobal.o) 
in output file used for input files: /Developer_Beta/Builds/MTToolbox/MTToolbox.build/Debug-iphoneos/MTToolbox.build/Objects-normal/armv6/libMTToolbox.a(FBConnectGlobal.o) 
and: /Developer_Beta/Builds/MTToolbox/MTToolbox.build/Debug-iphoneos/MTToolbox.build/Objects-normal/armv7/libMTToolbox.a(FBConnectGlobal.o) 
due to use of basename, truncation and blank padding 

在結束時,Xcode告訴編譯成功。但是,在應用程序項目中使用最終的靜態庫時,它不會生成,因爲它在構建的一部分(armv6)中找到重複的符號,並且在構建的其他部分(armv7)中未找到符號。

任何想法如何解決這個問題?

中號

+0

不要將庫建立到其他庫中 - 這是混淆,重複符號錯誤和難以調試結果的祕訣。看看這個問題:http://stackoverflow.com/questions/2300867/how-can-i-avoid-duplicate-symbol-errors-in-xcode-with-shared-static-libraries/2300873#2300873 – 2010-03-16 17:53:56

+0

卡爾,謝謝。也許你可以將它作爲我的問題的答案而不是評論,所以我可以將其標記爲已回答。 – 2010-03-17 19:26:23

回答

3

不要建庫到其他的庫 - 它是混亂的處方,重複的符號錯誤,並且難以調試結果。 看看這個問題:How can I avoid "duplicate symbol" errors in xcode with shared static libraries?

+0

我必須同意這裏。我不知道理論上什麼是最好的,但在實踐中,我只是花了幾周時間來調整,切換,並且在陽光下哄騙每一個構建設置和配置安排。最後,唯一可行的是從依賴於我的應用的靜態庫中刪除所有靜態庫(包括二進制文件和依賴項目以構建靜態庫)。不要將庫鏈接到庫。不要成爲英雄。直接將所有內容附加到您的應用程序在這個過程中節省大量的時間。 – Prairiedogg 2010-07-22 02:07:37

5

我不認爲這就是答案。如果你沒有兩個體系結構,它將完全工作。在鏈接中給出的示例中,可以將庫a,b和c鏈接到一個庫中,並與其鏈接。

Carl遇到的問題是庫中有兩個不同的體系結構(arm6和arm7),鏈接程序無法正確解析它們。

我發現了這個問題。據我所知,它是libtool中的一個錯誤。見我的文章的解決方案:

https://binaryfinery.wordpress.com/2010/06/11/universal-static-library-problem-in-iphone-sdk/

+0

你救了我的一天!謝謝! – 2011-12-23 12:57:58

+0

SOB博客已關閉:(這就是爲什麼好的SO答案不張貼鏈接,但發佈有意義的數據! – Kaa 2016-03-09 00:57:50

+0

抱歉,沒想到七年後我們仍然會閱讀它!工作鏈接是https:// binaryfinery .wordpress.com/2010/06/11 /萬向靜態庫的問題,在-iphone-SDK / – jamie 2017-11-07 01:15:16

1

我發現另一種解決方法是集架構爲「ARMv6的」。 ARCHS_STANDARD_32_BIT從armv6更改爲「armv6 armv7」,從而加劇了上述libtool錯誤。顯然,它不會生成armv7優化的二進制文件,但它仍然可以在iPhone 4上正常工作。