我盯着输出:
% file -b /lib/x86_64-linux-gnu/*.so | grep ", for" | colrm 1 130 | sort -u
=5018237bbf012b4094027fd0b96fc22a24496ea4, for GNU/Linux 3.2.0, not stripped
9f21d, for GNU/Linux 3.2.0, stripped
bee51, for GNU/Linux 3.2.0, stripped
, for GNU/Linux 3.2.0, stripped
sha1]=2e5abcee94f3bcbed7bba094f341070a2585a2ba, for GNU/Linux 3.2.0, stripped
GNU/Linux 3.2.0 有什么特别之处?这是在 Debian/bullseye 系统 (amd64) 上。
换句话说:在 GNU/Linux 3.2.0(线程模型、安全功能......)中引入了哪些如此重要的 API/功能?所需版本的显式设置将阻止用户使用某些LD_ASSUME_KERNEL
值,所以我猜有充分的理由拒绝旧值,例如LD_ASSUME_KERNEL=2.4.19
(例如)。
过去,GNU C 库的最低内核版本会定期调整,这通常允许进行一些简化。C 库包含大量代码来处理内核版本之间的变化,例如在可能的情况下优先使用的新系统调用。提高最低内核版本意味着可以删除处理旧版本的代码。
3.2.0 的意义仅在于它是 GNU C 库经过此过程的最后一个内核版本。它由 Joseph Myers于 2016 年 1 月发起,当时 2.6.32(之前的最低内核版本)已达到生命周期的尽头。3.2 是当时支持的最旧的内核。
凹凸本身是在两次提交中实现的,首先是 2016 年 2 月的所有非 x86 架构,然后是 2017 年 5 月的 x86 架构。(延迟与 OpenVZ 支持问题有关。)还有许多其他后续补丁可以删除不再需要的代码或简化代码,例如
recvmmsg
.这并不意味着 GNU C 库不支持自 3.2.0 以来添加到 Linux 内核的特性;它确实,以各种方式。一些特性作为改进得到支持(例如
clone3
),其他的只是简单地提供(例如close_range
),其他的则通过兼容性回退提供(即,如果系统调用不可用,则由新系统调用完成的工作由库完成) .--enable-kernel
您还可以使用配置选项构建具有给定内核版本要求的 C 库。