1

我对 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架构中构建所有内容。

4

2 回答 2

3

您遇到错误是因为您弄乱了架构设置。您不应该将这些修复为 ARM 代码,但也应允许 i386。

现在,您的多个(子)项目之一仅构建 ARM 代码,一旦您尝试构建模拟器版本,就会导致链接器错误。发生这种情况是因为您的体系结构设置不是应有的。

请注意您对Any iOS SDK的设置,该设置不正确,因为它仅构建 ARM 代码。选择特定设置(单击)后,使用键盘上的退格键完全删除这些设置。

这就是它应该的样子: 在此处输入图像描述

$(ARCHS_STANDARD_32_BIT)ARMV7在构建设备特定代码和i386构建模拟器特定代码时解析。仅当您计划将结果提供给较旧的 iOS 设备(iPhone 3G 及以下)时,才需要包含ARMV6我的屏幕截图中的代码。

一旦这些设置在所有(子)项目中处于活动状态,一切都应该顺利进行。

要从项目中创建通用库,如果您计划将静态库分发给其他开发人员,这很有用,请使用LIPO.

例子:

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

假设 input_library_1 是i386特定的(模拟器),而 input_library_2 是ARM特定的(设备),这会将它们加入一个可用于模拟器和设备的通用版本。

于 2012-04-18T11:47:08.227 回答
0

您似乎一直在尝试链接到为设备(armv6 或 armv7)构建的静态库。当您为模拟器构建时,架构将是 i386。所以你得到了所有这些讨厌的链接错误。解决方案是将为模拟器编译的库也包含在您的项目中。

于 2012-04-18T11:46:56.450 回答