XCode 6.1文件中缺less必需的体系结构X86_64

在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 

最近我更新了我的操作系统,优胜美地和XCode从6.0到6.1。 我已经在Stackoverflow上search了引用XCode 5.1的这个问题,并尝试了所有给定的解决scheme,但没有任何工作。

更新 – 我尝试了在答案build议的变化,但我仍然不断收到错误,说:“ 缺less所需的架构X86_64 ”。 在进一步的调查中,我发现来自我的库的文件ClientAuthenticator.o没有为X86_64体系结构构build,可能是这个问题? 我正在寻找如何为x86_64构build。

我的新问题是arm64和x86_64之间的区别什么 ? 更多的似乎只是架构制造商之间的差异,但基本的64位架构保持不变。

  • 你应该确定的第一件事是你的静态库有所有的体系结构。 当你在terminal上做一个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 ,你会发现缺less的架构。 以下是所有体系结构的屏幕截图 –

在这里输入图像说明

  • 为您的参考实现(项目使用静态库)。 默认设置应该可以正常工作 –

    在这里输入图像说明

更新12/03/14 Xcode 6标准体系结构不包括armv7s。

那么, armv7s是不是需要? 是。 看来,armv7和armv7s指令集之间的一般差异很小。 所以如果你select不包含armv7s,目标armv7机器码在32位A6设备上依然运行良好,几乎没有人注意到性能差距。 资源

如果有更聪明的Xcode 6.1+(iOS 8.1及以上版本),请分享。

如果您正在构build通用库并需要支持模拟器(x86_64),则通过将“ Build Active Architecture OnlyBuild Active Architecture Only设置为“ No Build Active Architecture Only来为所有平台构build框架。 在这里输入图像说明

许多使用在这里find的构build脚本: http : //www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial或在这里: https : //gist.github.com/sponno/7228256为他们的目标运行脚本。

我试图将x86_64,i386,armv7s,armv7和arm64添加到架构部分,只findlipo -info targetname.a成功构build之后永远不会返回这些架构。

在我的情况下,我不得不修改目标脚本,特别是从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

我做这个工作的方式是在编译之前把脚本放到你的Aggregate的Build阶段之后,确保你使用iPhone模拟器(我使用iPhone6)而不是IOS设备编译它。

这将给我2片:armv7和x86_64,然后拖放到新项目工作正常。

改变之后,你必须做到这一点(改变架构到armv7和删除其他人): –

改变你必须做的