gcc - 为什么 GCC 会自己编译 3 次?
问题描述
我已经从源代码编译了 GCC,但我似乎无法完全理解gcc
编译三遍的实用性。
这有什么好处?
这个答案说:
- 使用现有的 C 编译器构建新版本的 GCC
- 使用您刚刚构建的版本重新构建新版本的 GCC
- (可选)重复步骤 2 以进行验证。
现在我的问题是,一旦第一步完成并构建了编译器,为什么还要浪费时间重新构建它?
只是为了验证吗?如果是这样,那似乎很浪费。
这里的事情变得更复杂了,
为此的构建比以前的包更复杂,因为您将更多信息发送到配置脚本并且 make 目标不是标准的。
我的意思是整个编译器都是用 C 语言编写的,所以为什么不一次完成所有事情呢?
三相自举有什么用?
提前致谢。
解决方案
阶段 2. 和 3. 是对编译器本身的一个很好的测试:如果它可以编译自己(通常还有一些库,如
libgcc
andlibstdc++-v3
),那么它可以咀嚼非平凡的项目。在阶段 2. 和 3. 中,您可以生成编译器不同的选项,例如不优化 (
-O0
) 或优化 (-O2
)。由于程序的输出/副作用不应取决于所使用的优化级别,因此任何一个版本的编译器都必须生成相同的二进制文件,即使它们的二进制文件非常不同。这是编译器的另一个(运行时测试)。
如果出于某种原因您更喜欢非引导程序,请配置--disable-bootstrap
.
推荐阅读
- api - PUT 或 PATCH,哪个更快,为什么?
- sql - 根据第一个字段的值使用不同字段进行 SQL 排序
- python - 键错误:'客户'
- reactjs - 使用 msal.js 时 AcquireTokenSilent 失败
- python - 是否可以在后台运行 PyAutoGUI?
- python - 是否可以将预训练的 lda 模型加载到 gensim 中?
- glob - 全局匹配在 Storybook 配置中不起作用?
- go - golang json.Unmarshal 到 struct []byte
- binary - 如何使用 C 语言从原始图像文件中获取秘密位?
- html - 对齐页脚引导卡片组的顶部