GCC版本是否与内核版本绑定?

有gcc版本和内核版本之间的任何链接吗?具体而言,我能否将非常旧的gcc版本安装到最新的内核上。或者,我能否在非常旧的内核上构建最新版本的gcc?对于任何版本,两者之间是否存在任何兼容性问题?
3个回答

你可能会在使用非常旧的GCC版本编译新内核时遇到问题。
除此之外,GCC版本与Linux内核版本没有直接关联:
- 你可以在新内核的系统上运行古老的GCC版本。 - 你也可以在非常旧的内核的系统上运行新的GCC版本。唯一可能阻止你这样做的情况是,你的新GCC版本需要一个无法在该内核上运行的libc版本。但这种情况并不太可能发生。
话虽如此,如果你要安装一个较旧的GCC版本覆盖掉较新的GCC版本,你需要小心。因为较新的GCC版本可能是必需的。如果你从源代码自己构建GCC,你可以配置构建过程将其安装在自己的前缀目录下(而不是/usr)。如果这仍然导致构建失败,请确保较新的GCC(之前已经存在的)在PATH环境变量中的目录顺序比较新安装的较旧GCC更靠前。

Eliah,我们的旧内核(2.6.37)使用gcc 4.3,我们需要升级到gcc 5.1。这是交叉编译,并且5.1的工具链使用了内核头文件4.0.0。这是否意味着我们需要将内核升级到4.0.0?谢谢。 - ransh

我会对在较新的系统上使用较旧版本的GCC持谨慎态度,特别是如果较旧版本的可执行文件未命名为gcc-1.3(例如,在这种情况下版本为1.3),因为否则它可能与您Ubuntu系统上用于所有内容的当前版本产生冲突,并导致问题。

不过,回答你的问题,内核和GCC并不直接相关,但很可能内核是使用你正在使用的GCC版本(或稍旧的版本)进行构建的。


是的。一些新的内核功能需要最新版本的gcc和glibc才能正常工作。但这不是像内核3.0.2只能与gcc 4.2.1配合使用那样的限制性约束。更像是内核3.x只能与gcc 4.2.x配合使用。

看起来你可能把编译内核所需的编译器版本与运行内核所需的版本混淆了。运行内核从来不需要安装编译器。不过,你可能想进一步扩展这个答案,因为你提到了其他答案目前没有涉及的问题:使用某些编译器版本时,你可能无法为当前正在运行的内核构建模块。 - Eliah Kagan