gpt4 book ai didi

linux - 为什么从头开始构建 Linux (LFS) 需要多次通过?

转载 作者:IT王子 更新时间:2023-10-29 00:11:57 26 4
gpt4 key购买 nike

我正在尝试理解 Linux From Scratch 的概念,并且想知道为什么构建 binutilsgcc 等需要多次通过。

为什么我们需要 pass1 和 pass2 分开?为什么我们不能在 pass 1 中构建工具,然后使用它们构建 gccglibclibstdc++ 等。

最佳答案

目标是确保您的构建是一致的,无论您使用哪个编译器来编译您的编译器(以及该编译器有哪些错误)。

假设您正在使用 gcc 3.2 构建 gcc 4.1(我将把 gcc 3.2 称为“stage-0”)。为 gcc 4.1 做 QA 的人没有测试它在使用 gcc 4.1 以外的任何编译器构建时是否正常工作——因此,需要首先构建一个 stage-1 gcc,然后使用那个 stage-1编译第 2 阶段编译器,以防止第 0 阶段编译器中的任何错误影响最终结果。

然后,gcc 的默认编译过程使用 stage-2 编译器构建 stage-3 编译器,并比较两个二进制文件:它们之间的任何差异都可以用作存在证明一个错误。

(当然,这只是一种避免意外错误的有效机制;请参阅经典的 Ken Thompson 论文 Reflections on Trusting Trust,了解如何避免有意的错误这种措施)。


这超越了 gcc 进入整个工具链,因为相同的原则贯穿始终:如果在运行 glibc-x.y 的系统和运行 glibc-x 的系统上构建 glibc-x.y 的结果有任何差异。(y-1 ) 并且您做额外的传递以确保您在与目标环境相匹配的情况下进行构建,然后重现这些错误(和测试建议的修复)会比其他方式困难得多情况是这样的:没有您的(通常是未公开的)构建环境的任何人都无法重现错误!

关于linux - 为什么从头开始构建 Linux (LFS) 需要多次通过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39883865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com