如何选择 GCC 版本来编译 Linux 内核?

如何选择 GCC 版本来编译 Linux 内核?

我知道 Linux 内核指定了最低编译要求,但我还没有找到任何有关发行版/供应商在编译 Linux 内核时如何选择使用哪个版本的 GCC 的信息来源。

例如,Debian 维护者如何决定使用哪个版本的 GCC?或者像高通或三星这样的移动芯片组供应商在为支持Android的芯片组构建Linux时如何选择?

答案1

我不是内核开发人员,也没有权威的答案,但这是我对此的看法:

  • 新发行版可能会包含最新的稳定 GCC 版本,因为它通常提供最大的价值(在语言支持、功能、诊断和优化方面)。
  • 维护者可能会使用发行版默认 GCC 来构建软件包,这符合发行版的最大利益,因为它提供了一致性和稳定性(都使用相同的、经过尝试和测试的默认 GCC 版本)。
  • 芯片供应商通常会依赖其专有或移植的 GCC 编译器。在内部维护多个编译器(精力和成本方面)是没有意义的,并且芯片供应商(SoC 供应商或为这些芯片构建软件的软件公司)的客户可能使用相同的编译器。芯片),因此使用内核支持的最高 GCC 版本符合公司的最大利益。
  • 编译器是向后兼容的,并且 GCC 很少会引入破坏性接口更改(不考虑 ABI 更改,例如 C++98 到 C++11),因此几乎总是需要使用最新的编译器版本。然而,也存在编译器错误,并且较新的编译器版本可能会引入性能回归,因此升级编译器版本可能是一件大事,并可能导致公司以非常缓慢的速度推进其 GCC 版本(对于开发自己的芯片供应商来说)编译器,也非常昂贵)。

总结一下我的两点:我认为 Linux 维护者将倾向于使用发行版默认的 GCC 版本,而芯片供应商将倾向于使用支持其目标的最新可用 GCC 版本(并且与系统的其他组件(例如驱动程序)配合良好) )。希望这是有道理的。

关于同一个问题,我在 Linux Journal 上看到了这篇非常有趣的文章,内容是关于内核使用哪个 GCC 版本背后的决策,非常值得一读:
最低 GCC 版本可能从 3.2 跃升至 4.8

相关内容