GLIBC:如何告诉可执行文件链接到特定版本的 GLIBC

Har*_*ith 7 c unix linux glibc libc

我们正在构建一个针对 Ubuntu 18.04 LTS 和所有更高版本的 GTK3 应用程序。但是,当我们在 Ubuntu 20.04 版本中构建应用程序时,该应用程序无法在较旧的 Ubuntu 版本上运行。它说

libc.so.6:找不到版本“GLIBC_2.31”(.source 需要)

但如果我在 Ubuntu 18.04 上构建一个应用程序,它将适用于所有后续的 Ubuntu 版本。Ubuntu 18.04 默认情况下有 GLIBC 版本 2.27,该版本适用于所有后续版本。

那么有什么方法可以告诉我的应用程序,该应用程序是使用 GLIBC 2.27 构建的,无论构建该应用程序的操作系统是什么版本?有什么方法可以在构建过程中将 GLIBC 版本的信息提供给应用程序吗?

Emp*_*ian 0

如何告诉可执行文件链接到特定版本的 GLIBC

不能

Antonio Petricca(以及其他地方)提供的 hack 可能会引入非常微妙的错误,并且是不明智的

解决此问题的正确方法是针对您需要运行的最小版本的 GLIBC 执行编译和链接。这可以通过

  • 在旧系统上构建
  • 建筑在chroot环境中
  • 在 docker 容器中构建
  • 创建一个 Linux 到旧版 Linux 的交叉编译器并使用它来构建程序。