在企业级 Linux 操作系统中,
- SLES 11.4 使用 glibc 2.11
- SLES 12.3 我认为使用 glibc 2.19
- RHEL 6.10 使用 glibc 2.12
- RHEL 7.6 使用 glibc 2.17
- glibc 的源代码目前为 2.29
- 不久前,我获得了来自具有 glibc 2.14 的 Linux 系统的可执行代码,但无法在 SLES 11 上运行它。
从所有阅读来看,glibc 似乎无法在系统上手动更新;升级版本的唯一方法是跳转到 Linux 操作系统的完整更新版本。 这是真的?
虽然一直存在向后兼容性,但没有向前兼容性,这让我......
我使用当前最新的 RHEL 7.6 和 glibc 2.17,如果有人当前使用 SLES 12 和 glibc 2.19 并给我可执行代码,我该怎么办?如果他们在不久的将来使用某些带有更高版本的 glibc 的 Linux,也会有同样的问题吗?有没有办法解决这个问题,无论是接收方有较旧的 glibc 还是提供方有较新的 glibc?我还发现问题的很大一部分是 glibc 网站的声明:GNU C 库每 6 个月发布一次。
答案1
库中有版本化的符号。如果新代码命中版本符号之一,并且该版本比 libc 中的任何版本都新,则您将无法运行
他们可以构建静态吗?
答案2
发行版附带较旧/较新的 glibc 版本,具体取决于所需的稳定性。
从所有阅读来看,glibc 似乎无法在系统上手动更新;升级版本的唯一方法是跳转到 Linux 操作系统的完整更新版本。这是真的?
不会。每次你的包管理器发现新版本的 glibc 时,glibc 都会更新。主要文件是/lib/libc.so.6
.这是链接到的动态库程序(以便它们可以运行 C 标准库中包含的 C 函数)。
尽管您可以通过编译所需版本的 glib 并将结果复制到libc.so.6
来手动更新 glibc lib
,但不建议这样做,因为二进制文件可能会在执行时发出错误消息,而且较新版本的 glibc 尚未经过发行版包的测试维护者。因此,您可以预期系统会不稳定。