减少所需的libc版本

Reducing the version of libc required

本文关键字:libc 版本      更新时间:2023-10-16

我最近在Ubuntu服务器上编译了一个二进制文件并分发了它。这是用户遇到的错误:

Failed (/lib32/libc.so.6: version `GLIBC_2.17' not found

有什么解决办法吗?我以前使用过另一个Linux发行版(centos6),它运行良好(对我和其他用户来说)。

我该怎么修?

最简单的解决方案是在您想要支持的最旧系统上构建。

如果你想使用更新的库,你有两个选项

  1. 静态链接libstdc++
  2. 使用二进制文件分发您的库版本,并在链接时使用RPATH

您可以使用-static-libgcc -static-libstdc++ -static与g++静态链接,这应该会静态链接所有内容,但会放大您的二进制文件。

另一个选项是使用RPATH,-rpath链接器选项可以这样传递:

-Wl,-rpath,$PATH用类似libs的东西替换$PATH,或者只是。对于和二进制文件相同的目录,通过这种方式生成的ELF(可执行文件)的头将知道在哪里查找所需的共享库,并且您可以使用二进制文件重新分发共享库。

否则,您可以编译并链接到目标计算机上支持的版本。