簡體   English   中英

無法將iOS / iPhone應用程序構建為i386以外的任何其他應用程序

[英]Can't build iOS/iPhone app as anything other than i386

我是iOS / iPhone / XCode世界的新手,所以如果你猜的是介於相當復雜的東西之間,而且每個人都應該知道這么簡單,我會選擇簡單的答案。 :-)

好的,所以我繼承了一個我們外包給另一家公司的iPhone項目。 我現在唯一的目標是能夠建立當時的事情。 我設置了XCode 4.2並安裝了適當的SDK。 我加載了這個項目,到目前為止一切似乎都很好。 但是,當我構建時,我會從我認為構建的鏈接階段中得到錯誤。 我不完全確定,因為建築時狀態會迅速改變。 我得到的錯誤如下:

來自XCode構建的錯誤

從我在網上找到的,似乎我使用的其中一個庫沒有為i386平台編譯。 首先,這對我來說沒有意義,因為我正在使用的庫(這些錯誤來自哪里)目前作為子項目包含並生成.a文件,我認為這些文件是獨立於拱形的(我在這里錯了) ??)。 此外,我在項目中找不到任何指示XCode構建i386架構的項目。 這是我到目前為止所做的:

  • 確保出現這些錯誤的文件包含在Build Phase選項卡的“Compile Sources”部分(.m文件)中
  • 將我的架構設置為armv6armv7 ,並將Build Active Architecture Only設置no (見下圖)

主項目配置 主項目構建配置

子項目配置 子項目配置



當我使用發布配置構建時,我仍然遇到此錯誤,我不知道為什么。 我在構建配置中看到的所有內容似乎都表明我應該在arm架構中構建所有內容。

您遇到錯誤,因為您搞亂了架構設置。 您不應該將這些修復為ARM代碼,但也允許使用i386。

現在,您的一個(子)項目只構建ARM代碼,一旦您嘗試構建模擬器版本,就會導致鏈接器錯誤。 這種情況正在發生,因為您的架構設置並非如此。

請注意您的Any iOS SDK設置,因為它只構建ARM代碼,因此不正確。 選擇特定設置(單擊)后,使用鍵盤上的退格鍵完全刪除這些設置。

這應該是這樣的: 在此輸入圖像描述

$(ARCHS_STANDARD_32_BIT)在構建特定於設備的代碼時解析為ARMV7 ,在構建模擬器特定代碼時解析為i386 只有當您計划將結果提供給較舊的iOS設備(iPhone 3G及更低版本)時,才需要根據我的屏幕截圖包含ARMV6代碼。

一旦這些設置在所有(子)項目中處於活動狀態 ,一切都應該順利進行。

LIPO項目中創建通用庫,如果您計划將靜態庫分發給其他開發人員,請使用LIPO

例:

lipo input_library_1.a input_library_2.a -create -ouput output_library.a

讓我們說input_library_1是i386特定的(模擬器)和input_library_2是ARM特定的(設備),這將它們連接成可用於模擬器和設備的通用版本。

您似乎一直在嘗試鏈接到為設備構建的靜態庫(armv6或armv7)。 當您為模擬器構建時,架構將是i386。 所以你得到了所有這些討厭的鏈接錯誤。 解決方案是在項目中包含為模擬器編譯的庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM