簡體   English   中英

Xcode 6.1 文件中缺少所需的架構 X86_64

[英]Xcode 6.1 Missing required architecture X86_64 in file

在 Xcode 6.1 中,我收到 iPhone 6, iPhone 5s(iOS 7.1) 的錯誤消息,上面寫着

    Undefined symbols for architecture x86_64:
      "_OBJC_CLASS_$_ClientAuthenticator", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
linker command failed with exit code 1

這就是我對架構設置的看法

  Architectures : Standard Architectures(armv7, arm64) - $(ARCHES_STANDARD)
  Base SDK : Latest iOS(8.1) 
  Valid Architectures: arm64, armv7, armv7s

  IOS Deployment Target: iOS 6.0

最近我將我的操作系統從 6.0 更新到了 Yosemite 和 Xcode 6.1。 我在 Stack Overflow 上搜索了這個問題,它指的是 Xcode 5.1 並嘗試了所有給定的解決方案,但沒有任何效果。

更新- 我按照答案中的建議嘗試了更改,但我仍然收到錯誤消息,顯示“缺少所需的架構 X86_64 ”。 在進一步調查中,我發現來自我的庫的文件 ClientAuthenticator.o 不是為 X86_64 架構構建的,可能這就是問題所在? 我正在尋找如何為 x86_64 構建它。

我的新問題是arm64 和 x86_64 之間什么區別 更多的似乎只是架構制造商之間的差異,但基本的 64 位架構保持不變。

  • 您應該確保的第一件事是您的靜態庫具有所有架構。 當您在終端上執行lipo -info myStaticLibrary.a時 - 您應該看到您的胖二進制文件的armv7 armv7s i386 x86_64 arm64架構。

  • 為了實現這一點,我假設您正在制作一個通用二進制文件 - 將以下內容添加到靜態庫項目的架構設置中 -

在此處輸入圖片說明

  • 所以,你可以看到我必須手動設置靜態庫項目的Standard architectures (including 64-bit) (armv7, armv7s, arm64)

在此處輸入圖片說明

  • 或者,由於正常的$ARCHS_STANDARD現在包括 64 位。 你也可以做$(ARCHS_STANDARD)armv7s 在沒有它的情況下檢查lipo -info ,您將找出缺少的架構。 這是所有架構的屏幕截圖 -

在此處輸入圖片說明

  • 供您參考實現(使用靜態庫的項目)。 默認設置應該可以正常工作 -

    在此處輸入圖片說明

更新 12/03/14 Xcode 6 標准架構不包括 armv7s。

那么, armv7s嗎? 是的。 armv7 和 armv7s 指令集之間的一般差異似乎很小。 所以如果你選擇不包含 armv7s,目標 armv7 機器代碼在 32 位 A6 設備上仍然可以正常運行,幾乎沒有人會注意到性能差距。 來源

如果 Xcode 6.1+(iOS 8.1 及更高版本)有更智能的方法 - 請分享。

如果您正在構建一個通用庫並且需要支持模擬器 (x86_64),那么通過將Build Active Architecture Only設置為NoBuild Active Architecture Only適用於所有平台的框架。在此處輸入圖片說明

許多人使用此處找到的構建腳本: http : //www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial或此處: https : //gist.github.com/sponno/7228256用於他們在目標中的運行腳本。

我試圖將 x86_64、i386、armv7s、armv7 和 arm64 添加到架構部分,結果發現lipo -info targetname.a在成功構建后從未返回這些架構。

就我而言,我必須修改目標運行腳本,特別是 gist 鏈接中的第 1 步,以使用 -arch 手動包含架構。

Step 1. Build Device and Simulator versions xcodebuild -target ${PROJECT_NAME} ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" xcodebuild -target ${PROJECT_NAME} -configuration ${CONFIGURATION} -sdk iphonesimulator -arch x86_64 -arch i386 -arch armv7 -arch armv7s -arch arm64 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

這是對您關於x86_64arm64之間區別的最新問題的arm64

  • 運行 64 位模擬器需要x86_64架構。

  • 運行 64 位設備(iPhone 5s、iPhone 6、iPhone 6 Plus、iPad Air、帶 Retina 顯示屏的 iPad mini)需要arm64架構。

我遇到了完全相同的問題,並按照本教程https://github.com/jverkoey/iOS-Framework#faq

我完成這項工作的方式是在將腳本放入聚合的構建階段之后,在編譯之前,確保使用 iphone 模擬器(我使用 iPhone6)而不是 IOS 設備進行編譯。

這會給我 2 個切片:armv7 和 x86_64,然后將其拖放到新項目中對我來說工作正常。

我使用lipo命令手動組合兩個構建的靜態庫。

例如:我有一個靜態庫(libXYZ.a)要構建。

我為Generic iOS Device運行構建並在Debug-iphoneos/獲得了產品

$ lipo -info Debug-iphoneos/libXYZ.a
Architectures in the fat file: Debug-iphoneos/libXYZ.a are: armv7 arm64

然后我為任何iOS Simulator運行 build 並在Debug-iphonesimulator/獲得產品

$ lipo -info Debug-iphonesimulator/libXYZ.a
Architectures in the fat file: Debug-iphonesimulator/libXYZ.a are: i386 x86_64

最后我組合成一個包含所有架構。

$ lipo -create Debug-iphoneos/libXYZ.a Debug-iphonesimulator/libXYZ.a -output libXYZ.a
$ lipo -info libXYZ.a
Architectures in the fat file: libXYZ.a are: armv7 i386 x86_64 arm64

我的解決方案是連接我的 iPhone 6,在它上面進行構建,我讓項目成功運行。

因為我是為 iPhone 6 Simulator 構建的。

僅將構建活動架構設置為 No 為我解決了這個問題。 在此處輸入圖片說明

您必須進行以下更改(將架構更改為 armv7 並刪除其他架構):-

你必須做出改變

另一件需要注意的事情是 XCode 處理庫導入很糟糕,在很多情況下,解決方案是在項目中找到導入的文件,在 Finder 中或從命令行中刪除它,然后重新添加,否則它XCode 不會正確更新。 通過 XCode 將舊文件留在那里,您一直在循​​環運行,不明白為什么它沒有編譯,缺少架構等。

如果您在使用外部庫之一的本機項目中遇到此問題。 您應該刪除該項目並再次使用react-native link <package-name> 那應該可以解決問題。

我嘗試使用上述所有方法,但在我的情況下沒有任何效果。

我使用了導致此問題的 SumUp 庫。

我通過以下方式修復它:

  1. 刪除 -ObjC 參數(全部); 在以前的 SumUp 庫中,他們需要用參數填充 -ObjC 以使其工作,但是最新版本(在我在這里回答時為 xc v4.0.1),文檔說將其刪除。

那仍然沒有解決問題,我仍然看到到處都是錯誤,因此來到這個線程,......但是,在玩弄設置之后,以下修復了它:

  1. 進入項目的“構建設置”,然后將“僅構建活動架構”更改為“是”,清理,重建,沒有錯誤,最后!...

我希望這對使用 SumUP 集成的人有所幫助,花了一整天的時間才發現...

干杯,

H

暫無
暫無

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

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