Answers:
架构是您要构建的架构,有效架构是您可以想到的使用代码库构建的架构。
因此,也许您只想为armv7构建二进制文件,但是相同的源代码对于armv7和armv6可以很好地编译。所以VALID_ARCHS = armv6 armv7 armv7s
,但是您设置了,ARCHS = armv7s
因为这就是您实际上要用代码构建的全部。
或者,用苹果语:
ARCHS(建筑)
用空格分隔的标识符列表。指定二进制文件所针对的体系结构(ABI,处理器模型)。当此构建设置指定多个体系结构时,生成的二进制文件可能包含每个指定体系结构的目标代码。
和:
VALID_ARCHS(有效架构)
用空格分隔的标识符列表。指定可以为其构建二进制文件的体系结构。在构建过程中,此列表与ARCHS构建设置的值相交。结果列表指定了二进制文件可以运行的体系结构。如果生成的体系结构列表为空,则目标不生成二进制文件。
来源:Xcode构建设置参考
在实践中,您不用VALID_ARCHS
管它,不用担心更改它,而只需摆弄ARCHS
设置要构建的体系结构。通常,您将Debug构建设置为just NATIVE_ARCH
,因为您只想为将要在其上测试/运行的机器构建调试版本,而Release则构建为计划支持的所有体系结构。
从Apple文档中,我们知道将要构建的二进制Xcode是与Valid Architectures
相交的列表Architectures
。
因此,我认为杰里米的答案不正确,因为他说:
因此,也许您只想为armv7构建二进制文件,但是相同的源代码
对于armv7和armv6 可以很好地编译。所以VALID_ARCHS = armv6 armv7 armv7s
,但是您设置ARCHS = armv7s是因为您实际上是要用代码构建的全部。
当您设置VALID_ARCHS = armv6 armv7 armv7s
并设置时ARCHS = armv7s
,将生成二进制Xcode的结果是armv7s,它与armv6 / armv7不兼容。
并且,如果要与armv6 / armv7 / armv7s兼容,则必须设置 VALID_ARCHS = armv6 armv7 armv7s
和ARCHS = armv6
。这样,二进制Xcode的结果将是armv6,并且由于arm处理器向后兼容,因此可以在armv6 / armv7 / armv7s上正常运行。