假设我有一个程序依赖于较新的 glibc 版本,该版本在系统中无法通过软件包获得。它给出了:
version `GLIBC_2.xxx' not found
一种解决方案是使用 glibc 静态编译二进制文件。
另一种被许多人认为“不安全”的解决方案是安装更新libc.so.6
的而不是操作系统提供的。
如果包含先前的 ABI 端点,那么第二个解决方案到底有何不安全或坏主意的地方?libc.so.6
例如,如果我运行,strings /usr/lib/libc.so.6 | grep --perl-regexp "^GLIBC_"
我可以看到很多 ABI 版本,例如:
...
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
...
因此,如果我用其中libc.so.6
包含额外glibc ABI 版本的更新版本进行覆盖,它会如何破坏旧应用程序或导致系统崩溃?
或者不是……?:)