LFS:工具链是什么?为什么它很重要?

LFS:工具链是什么?为什么它很重要?

我正在从头开始学习 Linux,并且我正在讨论工具链。到目前为止,我已经理解了一切,但我不理解“工具链”这个术语。

据我所知,工具链是一组工具,将用于在新发行版上编译工具。这是必需的,以便软件不会使用主机编译器进行编译。

我是否正确地认为必须使用主机工具(我相信这是现阶段正在构建的编译器)来编译 Glibc、Binutils 等?然后,一旦完成,新编译的编译器将用于构建其他工具来创建操作系统?

这部分非常粗略,谷歌搜索并没有产生可能有用的结果。如果有人有任何有用的资源可以分享,这将帮助我更好地理解这一点,那就太好了。

答案1

工具链只是构建软件的工具(编译器、汇编器、链接器、库和一些有用的实用程序)。

在这种情况下,重要的部分是独立于主机- 这与下载的工具无关。

您可能想要重建工具的原因有多种:

  • 潜入后门更加困难(尽管并非不可能)
  • 可以调整编译参数以适应你的系统而不仅仅是一个通用的二进制文件。
  • 您将获得最新版本的工具。

答案2

LFS 重建工具链(即编译器、链接器、汇编器以及它们所使用的库)三次:

  • 第一次使用主机系统的工具链在目标系统上构建新的工具链( gccldbinutils、等)。glibc这些工具将链接到主机系统上的共享库,如果您此时启动到目标系统,则这些工具将不存在。所以...
  • 第二次,工具链是根据目标计算机上安装的库构建的。这意味着如果您启动到目标系统,工具链将起作用,但仍然存在一些可能与主机系统链接的可能性,并且无论工具链仍然是针对主机系统而不是目标系统进行优化编译的。所以...
  • 第三次是魅力所在,这一次工具链将完全“清理”主机系统的任何链接或附件,并针对您的目标系统进行优化。

这可能是构建 LFS 系统最重要的部分,密切关注说明非常重要。在我构建的所有 LFS 系统(迄今为止有四个)中,这是我遇到问题的部分。有时这些问题直到很久以后才出现,你可以想象这是非常令人沮丧的。

相关内容