2012-11-20 119 views
0

我們實現了一個靜態庫並試圖在項目中使用它。該庫被編譯/構建好,但我們試圖分別進口.A & .h文件後運行該項目,我們有以下錯誤遇到:靜態庫和XCode 4.x

ld: warning: ignoring file Lib.a, file was built for archive which is not the architecture being linked (i386) 

Undefined symbols for architecture i386: 
    "_OBJC_CLASS_$_MFourInOneStaticLib", referenced from: 
     objc-class-ref in MAppDelegate.o 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

我已經檢查了architecture.More過度,我們使用模擬器進行測試。

+0

您需要使用「lipo」工具構建通用庫。 –

回答

2

看起來你的lib不包含正確的架構。

爲iOS你需要的ARMv7和模擬器,你需要I386

測試它

lipo -info %NAME% 

往往脂只專爲ARM或x86的

建造它爲兩個拱然後結合這兩個文件

lipo ./build/Release-iphoneos/%NAME% ./build/Release-iphonesimulator/%NAME% -output ./Dist/lib/%NAME% -create 
+0

感謝您的早期回覆。實際上,因爲我們需要ios3.0以及ios 4.0兼容性,所以我們同時使用了armv6和armv7架構。此外,我們在模擬器中添加了i386用於測試目的,但錯誤仍然存​​在。另外,請詳細說明如何使用'lipo'工具,因爲這對我們來說確實是一個新概念。 –

+0

它與armv6相同:) lio -info%NAME%=在lib中打印體系結構,libo F1 F2 -output F3 -create結合F1和F2 ...基本上只是將它們相互附加並保存爲F3 –

+0

在終端,我們應該使用什麼來代替%NAME%,根據我們的理解,您提供的語法將在終端上執行? –

0

您是否檢查此鏈接? Make a fat library我將此用於我的項目,並且運行良好。

+0

謝謝,Brian ...讓我試試,然後回到你身邊...... :) –