libc 版本是否与内核版本相关联?

mat*_*975 8 versions shared-library kernel gcc 12.04

在阅读了我上一个问题的答案后,我得出的结论是,以下问题的答案正是我真正想要的:

特定版本的内核是否需要特定版本的 libc 才能正常运行?

基本上我的问题源于在我的 12.04 ubuntu 上构建应用程序并尝试在 8.04 上运行它。从那以后,我从这个和其他 stackexchange 论坛中了解到,导致这些问题的是 libc 的向后兼容性。因此,我可能天真地尝试做的是构建与我的目标上存在相同版本的 libc,然后在构建应用程序时链接到我的主机上。然后在理想的世界中,当我将其复制到主机时,已链接到“正确”的 libc,它应该可以工作(至少在我的脑海中)。我完全找不到在我的系统上安装旧 libc 的方法,并想知道每个版本是否都与内核版本紧密绑定,因此出现了上述问题。

小智 6

在某种程度上,它们彼此联系在一起。

  • 您正在运行的内核是使用特定的 libc 编译的。
  • 您拥有的 libc 被编译为仅支持特定版本以上的内核。

因此,如果您要从 Ubuntu 存储库安装内核包和 libc 包,而不是自己编译它们,您就会陷入上述困境。

就 libc 而言,执行您建议的一种方法是从8.04 上的源代码编译 12.04 内核,从而将其与 8.04 libc 链接。然后使用该自定义内核启动 12.04,在此基础上编译 8.04 上的 libc 版本,同样来自源代码。你安装它,你的应用程序应该共享同一个旧的 8.04 libc。

我假设您也知道您的应用程序链接的任何其他 12.04 库可能在 8.04 中不可用,因此您也必须从源代码编译它们......

总而言之,最好只在 8.04 上编译


ish*_*ish 4

特定版本的内核是否需要特定版本的 libc 才能正常运行?

是的,除非您使用自己喜欢的 libc 版本从源代码自行构建内核。Ubuntu 内核是在目标版本之前的 LTS 版本上构建的,因此与 8.04 libc 兼容的“最新”Ubuntu 内核是 Ubuntu 9.10 的内核。