假设我有一个程序依赖于较新的 glibc 版本,该版本在系统中通过包不可用。它给出:
version `GLIBC_2.xxx' not found
Run Code Online (Sandbox Code Playgroud)
一种解决方案是使用 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
...
Run Code Online (Sandbox Code Playgroud)
因此,如果我使用其中libc.so.6包含其他glibc ABI 版本的较新版本覆盖,它如何破坏旧应用程序或导致系统损坏?
或者不是……?:)