Xcode构建设置中的"架构"和"有效架构"之间有什么区别?

nor*_*ree 111 xcode ios xcode4.5

它们的含义是什么,我可以将它们设置为不同的值吗?

Jer*_*man 109

架构是你想要构建的,有效的架构是你可以设想用你的代码库构建的架构.

所以也许你只想为armv7s构建你的二进制文件,但是相同的源代码可以很好地编译armv7和armv6.所以VALID_ARCHS = armv6 armv7 armv7s,但你设置的ARCHS = armv7s原因是你真正想要用你的代码构建的所有内容.

或者,在Apple-ese中:

ARCHS(架构)

以空格分隔的标识符列表.指定二进制文件所针对的体系结构(ABI,处理器模型).当此构建设置指定多个体系结构时,生成的二进制文件可能包含每个指定体系结构的对象代码.

和:

VALID_ARCHS(有效架构)

以空格分隔的标识符列表.指定可以为其构建二进制文件的体系结构.在构建期间,此列表与ARCHS构建设置的值相交; 结果列表指定二进制文件可以运行的体系结构.如果生成的体系结构列表为空,则目标不生成二进制文件.

来源:Xcode构建设置参考

在实践中,您可以VALID_ARCHS独自离开,不用担心更改它,只需ARCHS设置您想要构建的体系结构即可.通常,您将Debug构建设置为just NATIVE_ARCH,因为您只想为将要测试/运行它的机器构建调试版本,并为您计划支持的所有体系结构构建Release版本.

  • @ JeremyW.Sherman好像VALID_ARCHS没用? (3认同)
  • @ onmyway133大多数时候,你不想要VALID_ARCHS.如果您仅针对某些体系结构编写内联asm,则可以更改VALID_ARCHS以反映您的代码不再适用于除这些体系结构之外的任何体系结构.但是,大多数情况下,这只是来自Xcode的一个提示,表明它可以构建哪些架构,并从那里为你的ARCHS选择. (3认同)

foo*_*gry 6

Valid Architectures 从Apple文档中,我们知道Xcode将构建的二进制文件是与.相交的列表Architectures

\n\n

所以,我不认为杰里米的回答是正确的,正如他所说:

\n\n
\n

因此,也许您只想为armv7s构建二进制文件,但相同的源代码可以
很好地编译为armv7和armv6。所以VALID_ARCHS = armv6 armv7 armv7s,但是你设置了 \n ARCHS = armv7s 因为这就是你真正想要用你的代码构建的。

\n
\n\n

当你设置VALID_ARCHS = armv6 armv7 armv7s,然后设置ARCHS = armv7s,二进制Xcode将构建的结果是armv7s\xef\xbc\x8cit不能与armv6/armv7兼容。

\n\n

如果你想兼容armv6/armv7/armv7s\xef\xbc\x8c你必须设置 VALID_ARCHS = armv6 armv7 armv7sARCHS = armv6。这样,二进制Xcode构建的结果是armv6,并且它可以像arm一样在armv6/armv7/armv7s上运行良好处理器向后兼容。

\n