我使用跨平台代码,这意味着我必须为iOS构建开源C++项目,以便在我的iOS应用程序中使用它们。有时我必须构建自己的项目,有时我会得到一个很好的CMake设置,但似乎没有两个项目对这两个字段具有完全相同的设置。
有些是"armv7",有些是"armv7 armv7s“,还有一些是"armv7 armv7s arm64”。我知道"armv7“指的是特定一代的设备硬件。但这是否意味着,如果我只设置"armv7“,我的应用程序将不能在armv7s或新的64位iPad上运行?这些多架构是否像拥有fat库一样,每个架构都有单独的副本?
然后,对于“架构”,有更多的选择。像“标准架构(armv7,armv7s)”和其他像"$(ARCHS_STANDARD_32_64_BIT)“这样的选项。我经常发现必须更改这些才能构建内容,而不会出现关于i386的错误。事实上,iOS项目实际上是为英特尔(模拟器)和Arm构建的,这让我更加困惑。
我真的想要一个更高层次的解释,而不是一个“使用这个设置”的答案。我希望我的应用程序能够在它打算运行的设备上运行,因为我负担不起现有的所有不同版本的iPad。作为参考,我只想支持iPad 2和更高版本,以及iOS 6/7。
发布于 2014-03-06 09:11:32
这些是不同的指令集。如果你正在构建一个库,你需要构建下游应用程序需要的所有不同的指令集/架构,否则当你尝试构建应用程序时,你会得到链接器错误。
这对于模拟器来说比较复杂,它需要英特尔x86或x86_64而不是ARM。
根据您选择的内容,编译器将创建包含多个体系结构的fat库。
在运行时,不同的指令集之间有一些兼容性(例如,32bit will run on 64bit),但这在链接期间没有帮助。如果你正在编译64位,那么你所包含的库将需要64位。
因此,为devices you're targeting设置了简短的答案。你可能不再需要armv6了。
https://stackoverflow.com/questions/22211382
复制相似问题