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

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

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

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

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

答案1

在某种程度上,它们是相互联系的。

  • 您所运行的内核是使用特定的 libc 编译的。
  • 您所编译的 libc 仅支持特定版本以上的内核。

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

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

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

总结,最好在 8.04 上编译

答案2

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

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

相关内容