我使用跨平台代码,这意味着我必须为iOS构建开源C ++项目才能在我的iOS应用程序中使用它们。有时我必须构建自己的项目,有时候我会得到一个很好的CMake设置,但是没有两个项目似乎对这两个字段有完全相同的设置。
有些人拥有“armv7”,其他人拥有“armv7 armv7s”,而其他人拥有“armv7 armv7s arm64”。我得到“armv7”指的是特定代的设备硬件。但这是否意味着如果我只设置“armv7”我的应用程序将无法在armv7s或新的64位iPad上运行?这些多种体系结构是否具有胖库,每个体系结构都有单独的副本?
然后对于“架构”,还有更多选择。选项如“标准架构(armv7,armv7s)”和其他类似“$(ARCHS_STANDARD_32_64_BIT)”。我经常发现必须更改这些内容以便构建,而不会出现有关i386的错误。 iOS项目实际上是为英特尔(模拟器)以及Arm构建的,这一事实让我感到困惑。
我真的在更高层次解释这是如何组合起来而不是“使用此设置”的答案。我想确信我的应用程序可以在它的设备上运行,因为我买不起现在存在的所有不同版本的iPad。作为参考,我想支持iPad 2及更高版本,仅支持iOS 6/7。
答案 0 :(得分:0)
这些是不同的指令集。如果您正在构建库,则需要构建下游应用程序所需的所有不同指令集/体系结构,否则在尝试构建应用程序时会出现链接器错误。
模拟器很复杂,需要Intel x86或x86_64而不是ARM。
根据您选择的内容,编译器将创建包含多个体系结构的胖库。
运行时不同指令集之间存在一些兼容性(例如,32bit will run on 64bit)但在链接期间无效。如果您正在编译64位,那么您所包含的库将需要64位。
因此为devices you're targeting设置了简短的答案。例如。你可能不再需要armv6了。