Xcode:基于架构的条件构建设置(设备(ARM)与模拟器(i386))

noa*_*mtm 25 compiler-construction iphone xcode linker build

我正在构建一个必须在模拟器和设备上运行的iPhone应用程序.但是我正在使用一个外部编译的库,它有一个版本用于模拟器,一个用于设备(​​不同的CPU).

我该怎么做?我来自Visual C++所以我是Xcode的新手,我找不到这样做的方法.

编辑,2016年3月:这个问题是在大约6年前的2009年7月问的.Xcode已经发生了很大的变化,但我猜有些东西仍然存在.例如,现在接受的答案不是Xcode v3中的一个选项.

clo*_*ach 29

我在集成Adobe Omniture的"AppMeasurement"库时遇到了这个问题,该库目前为3种架构编译:libAppMeasurement-iOSSimulator.a,libAppMeasurement-iOSDevice.a和libAppMeasurement-iOSDevice-armv7.a.

虽然这里的其他答案基本上是正确的,但我最终不得不到其他地方去真正了解并解决问题.

步骤1.了解问题

这篇博文很好地解释了整个问题.它为解决Xcode 3中的问题提供从头到尾的说明.请参阅下面的Xcode 4.

注意:您可以尝试跳过他所说的添加静态库然后删除它们的位.下次我这样做时,我可能只是添加头文件,然后直接跳过编辑其他链接器标志.

步骤2. Xcode 4中的条件构建设置

这个StackOverflow页面解释了在Xcode 4中设置条件构建设置的新方法.提示: Build Settings选项卡上的文本字段是拖放功能; 一旦准备好在其他链接器标志下编辑条件构建设置,就可以将静态库文件直接拖到文本字段上,Xcode将自动进入(希望是相对的)路径.

这是我的其他链接器标志的屏幕截图,一旦我得到"缺少必需的架构i386"警告就消失了,没有构建错误:

在此输入图像描述 __


Lou*_*arg 9

你有3个选择:

  1. 如果您控制单击Inspect窗口中的构建设置名称(您可以在其中更改编译器设置等),它将带来一个条件化该设置的选项.只需转到要更改的链接器标志,然后通过SDK对它们进行条件化,然后输入每个SDK的特定库.

  2. 或者,您可以使用库并在每个SDK根目录中的相同路径上安装它("/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib/"和"/ Developer/Platforms /" iPhoneSimulator.platform /开发商/软件开发工具包/ iPhoneSimulator3.0.sdk/usr/lib目录").由于使用了SDK相对库搜索路径,因此将为任一构建引入适当的版本.

  3. 您可以将两个库组合成一个胖库.这可能是一个坏主意,但如果你想这样做,请查看联机帮助页.


小智 5

对于有人遇到警告,例如"[lib_for_sim_or_device]不是为架构而构建的......",在将第三方库文件夹拖入项目时会出现警告.

在场景背后,XCode会自动将库文件添加到"目标设置 - >构建短语 - >链接二进制文件和库"部分,从而导致与两个库的链接.

要解决此问题,请从"Link Binary with Libraries"中删除这些条目,然后按照上面有关sim/device的条件构建设置的指南进行操作

希望能帮助到你!