繁体   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