2014-03-07 43 views
0

我是新來的蘋果iOS開發。我正在嘗試創建靜態庫並將其添加到主應用程序。Apple Mach-O鏈接器警告。 LIB/libxyz.a缺少必需的i386硬件架構文件的lib/libxyz.a

  • 創建庫項目並將其作爲依賴項目添加到主應用程序。有用。
  • 現在我從圖書館項目(在調試的iPhoneOS存在),並複製到主應用程序採取了lib.a(靜態庫)。測試主應用程序 - 它的工作原理。

現在,當我試圖在主應用程序複製到其他位置(或者甚至改變文件夾名稱 - 其中主要的應用是存在),並嘗試在模擬器上運行,然後我得到以下錯誤: 忽略文件/Users/.../lib.a,在文件中缺少所需的體系結構i386的/Users/.../lib.a

我真的不明白的路徑上的關係/依賴。

+0

雖然我不確定你指的是哪個庫,但有一些庫文件可能沒有i386體系結構(模擬器)。在設備上試用。 – Raptor

+0

我已經創建了我自己的靜態庫。當靜態庫項目被添加爲依賴項目並且靜態庫(.a)被添加到主應用程序時,靜態庫的工作沒有問題。但是,當我嘗試改變主appliation的位置時,Xcode開始抱怨(.a)中靜態庫丟失i386架構:( – user2863876

回答

1

問題就解決了。

我使用的XCode 5.0.2和iOS 7.當過我編譯靜態庫,Xcode的說,它是建立一個通用的庫(但實際上不是)。 'Products'目錄顯示libxyz.a(它位於iphoneos /目錄中) - 這實際上是針對ARM設備的ARM6 & ARM7。所以,當我把這個'libxyz.a'文件並在另一個項目中使用它,鏈接器用來拋出警告'缺少所需的架構i386'。

我按照http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial

使用的腳本來生成含有兩個模擬器& iphone設備二進制單一的二進制。

# define output folder environment variable 
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal 

# Step 1. Build Device and Simulator versions 
xcodebuild -target ImageFilters ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" 
xcodebuild -target ImageFilters -configuration ${CONFIGURATION} -sdk iphonesimulator -arch i386 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" 

# make sure the output directory exists 
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}" 

# Step 2. Create universal binary file using lipo 
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a" 

# Last touch. copy the header files. Just for convenience 
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/" 
+0

雖然它的工作原理,要注意從孩子構建腳本不捕獲的錯誤。因此,如果其中一個xcodebuild的狀態是錯誤的,它仍然會說構建成功。 – vpathak

相關問題