在构建编译器时,必须指定Linux头文件版本和最小支持内核版本,以及glibc版本。目标机器上实际的内核版本和glibc版本(带有自己的内核头文件版本和最小支持内核版本)。我很困惑试图理解这些版本是如何配合工作的。
示例1:假设我有一个使用内核头文件 3.14 构建的 glibc 2.13 系统。这有意义吗? glibc 2.13(于2011年发布)如何使用来自 3.14(于2014年发布) 的新内核特性?
示例2:假设我有一个具有比 2.13 新的 glibc 版本的编译器。编译后的程序能在具有 glibc 2.13 的系统上运行吗?如果编译器的 glibc 版本比 2.13 老呢?
示例3:从 https://sourceware.org/glibc/wiki/FAQ#What_version_of_the_Linux_kernel_headers_should_be_used.3F 我了解到,如果使用旧的内核满足编译glibc时使用的“最小内核版本”,那么可以使用旧的内核。但是我不理解这段话: 另一方面(使用旧的内核头文件编译GNU C库并在最近的内核上运行)不一定按预期工作。例如,如果您使用旧的内核头文件来编译 GNU C库,则无法使用新内核特性。
这是唯一可能发生的事情吗?如果内核在编译时比较新,是否会破坏glibc中的某些内容?
示例4:glibc设置中更微妙的差异是否会产生影响(例如,将可执行文件与使用内核头文件3.Y编译的glibc版本2.X链接,并在最小支持内核版本为2.6.A的系统上执行,但在编译时针对使用内核头文件3.Z和最小支持内核版本为2.6.B的同一glibc版本2.X)?我怀疑它们不会产生影响,但想确保。
问题很多 :) 谢谢!