标记位码(-fembed-bitcode-marker)的意义是什么?

tho*_*les 4 xcode llvm ios

这在 Apple 开发中经常出现——当使用 bitcode 提交到应用商店时,你当然必须包含完整的 bitcode ( -fembed-bitcode)。但是有这种中间“标记”模式的原因是什么,它包括部分而不是位码本身?这一定是有原因的,为什么它经常被打开用于调试版本。

Max*_*ski 5

关键是在开发过程中使您的构建更快。

来源:您可以通读提交的代码审查,将embed-bitcode标志添加到 clang 编译器前端以获取更多详细信息:

  • 引入 -fembed-bitcode 驱动程序选项

    这是嵌入位代码更改的 clang 驱动程序部分。这包括:

    1. -fembed-bitcode 选项将编译分解为两个阶段。第一阶段发出优化的位码,第二阶段将位码编译成目标文件。

    2. -fembed-bitcode-marker 选项,它并没有真正分解为两个阶段来加速编译流程。

    3. 如果工具链支持嵌入的位码,则将正确的链接器标志传递给 darwin 链接器。

  • 在目标文件中嵌入位码(clang cc1 部分)

    仅标记模式用于加速编译,同时在最终输出中仍然产生足够的信息以检查所有文件是否包含位代码部分。-fembed-bitcode 选项将编译分为两个阶段,并且由于额外的进程启动、序列化和验证程序,它增加了可衡量的编译时间成本。-fembed-bitcode-marker 只是一种避免这种成本的方法,但仍会标记该部分以供稍后进行完整性检查(在我们的示例中由链接器完成)。

语境:Guardsquare博客文章中讨论了位码启用的基础之上。相关说明如下:

苹果如何处理嵌入的位码?

问题仍然存在:为什么 Apple 提供嵌入位码的选项?答案很简单。通过嵌入在可执行文件中的位码,Apple 能够在不与开发人员交互的情况下重新编译应用程序。这有很多优点。

  1. Apple 不断增强 Clang 编译器执行的优化,以进一步提高移动应用程序的性能并减小其大小。使用嵌入的位码,Apple 本身可以使用最新的、改进的编译器版本重新编译应用程序。这使应用程序开发人员摆脱了不断更新开发环境、重新编译和重新上传应用程序以从最新改进中受益的负担。

  2. 通过嵌入位码,开发人员使 Apple 能够将他们的应用程序迁移到新型设备。嵌入式位码使 Apple 能够重新编译现有应用程序并使它们与新设备的芯片组兼容。

如果您只是调试和/或测试您的应用程序,您将不会执行上述任何操作。那么,当您真的只想确保一切都正确构建和运行时,为什么要浪费时间和资源来实际包括位码呢?embed-bitcode-marker因此启用该标志是为了在开发期间伪造构建过程的这一部分。