1. 程式人生 > >使用.a庫時,報錯missing required architecture i386, 使用lipo的方法可完美解決

使用.a庫時,報錯missing required architecture i386, 使用lipo的方法可完美解決

轉載於 http://blog.csdn.net/smking/article/details/24101381

在使用自己或者其它人生成的.a庫時,加進來後,編譯可能會報上面的錯誤。

分析這個錯誤,缺少了i386架構的東西。這很可能是由於專案中包含的靜態庫是被編譯用於真機測試的,大家都知道蘋果手機cpu是arm架構,而mac筆記本(當然也包括運行於其上的iphone-simulator)是intel架構。所以當這個靜態庫被編譯用於device的時候,在目標為simulator下的編譯是會報錯的。

我們知道,編譯一個庫檔案時,生成這個.a庫時,會有兩個庫檔案,一個在 當前使用者下/資源庫/Developer/Xcode/DerivedData/xxxxx-xxxxx-xxxxx-xxxx/Build/Products/Debug-iphoneos/下, 另一個是在Products/Debug-ipohonesimulator。

編譯時,選擇目標為iOS Device, 則會在Products/Debug-iphoneos下生成.a庫檔案, 該庫檔案只能用於arm架構,即真機執行。

如果選擇目標為iPhone Retina等模擬器時,則會在Products/Debug-iphonesimulator資料夾下生成.a庫檔案。該庫檔案只能用於intel i386即模擬器執行,不能在真機執行。

所以在使用時,就會有兩個.a檔案,而且需要在使用時,進行切換以使用對應的.a檔案,非常麻煩。現在使用lipo工具可以把這兩個.a檔案合併成一個.a檔案,使用時系統會自動在兩個.a檔案中進行選擇。非常方便。

在terminal中執行, 

lipo -create libcoalr.a libcoalr_s.a -output t.a

就會生成一個t.a的庫檔案,這個就是合併過後的庫檔案,把該檔案和.h檔案一起發給客戶, 那麼客戶不管是使用模擬器環境還是使用真機環境,都能使用, 比較方便

本文系轉載,作者還未驗證,如有錯誤望指出