2

据我了解,“/lib/ld-linux.so.2”中的“2”很少更改。有旧程序无法与新库一起使用,也有新程序无法与旧库一起使用。但它们都引用/lib/ld-linux.so.2,阻止安装这两个库。

顺便说一句,那是什么version 'GLIBC_2.17' not found东西?为什么版本不在soname中,而是在其他地方?

4

1 回答 1

2

每当以旧程序无法与新版本的库一起使用的方式更改库时,都会更改此编号。如果旧程序仍可与新库一起使用(并且需要新版本的程序不会导致旧库崩溃),则无需更改编号,因为您只需安装最新版本的库即可。

据我了解,“2”(十年前是“1”)不应再改变。原因很简单:

“ld-linux.so.2”的第一个版本的编写方式是,任何版本的“ld-linux.so.2”都可以与使用该文件的任何程序一起使用——当旧版本的使用“ld-linux.so.2”。

这意味着: 无需安装两个不同的“ld-linux.so.2”文件,但安装此文件的最新版本就足够了。您不应简单地覆盖此文件,因为它与必须具有相同版本的其他文件(例如“libc.so.6”)捆绑在一起。

在加载程序的“2”版本中,.so 文件可能包含支持的版本号表。所以“libc.so.6”,版本 GLIBC_2.16,可能包含这个版本的库也支持“GLIBC_2.15”的信息。(新版本应该向后兼容,所以应该是这种情况。)

程序可能包含所需版本的列表(例如:程序需要 libc.so.6 版本“GLIBC_2.17”)。加载程序(ld-linux.so.2)检查库是否支持程序所需的版本,如果不支持则拒绝启动程序。在这种情况下,您的问题中的错误消息由加载程序打印。

于 2013-09-10T19:20:33.350 回答