首页 > 解决方案 > Linux:动态加载器选择了错误的库?

问题描述

我在我的系统上运行两个版本的 subversion,使用不同的库。这一直工作到昨天,旧版本在 中拾取系统库/usr/lib64,新版本在 中拾取新库~/local/lib,但现在已经坏了。

旧版本是随发行版一起安装的,几个月前我从源代码构建了新版本。我~/local用新的二进制文件~/local/bin/svn和新的库在~/local/lib. 我还在 中创建了一个新文件/etc/ld.so.conf.d,其中包括单行/home/me/local/lib

在我昨天尝试安装 Qt5 之前,这一切正常:我可以同时运行旧的 Subversion (1.7.14),as/usr/bin/svn和新的 (1.12.2),as ~/local/bin/svn

如果我现在尝试运行旧svn版本,它会告诉我其中一个 Subversion 库中缺少符号。如果我跑

$ ldd /usr/bin/svn

事实证明, svn的现在尝试加载的库~/local/lib,所以它不起作用。跑步ldconfig没有区别。新旧库完全不同,但不知何故具有相同的版本号:

$ ll /usr/lib64/libsvn_client-1.so.*
lrwxrwxrwx. 1 root root     24 Jan  3 11:37 /usr/lib64/libsvn_client-1.so.0 -> libsvn_client-1.so.0.0.0
-rwxr-xr-x. 1 root root 379656 Nov 20  2015 /usr/lib64/libsvn_client-1.so.0.0.0
$ ll /home/me/local/lib/libsvn_client-1.so*
lrwxrwxrwx. 1 me me      24 Oct  8 16:32 /home/me/local/lib/libsvn_client-1.so -> libsvn_client-1.so.0.0.0
lrwxrwxrwx. 1 me me      24 Oct  8 16:32 /home/me/local/lib/libsvn_client-1.so.0 -> libsvn_client-1.so.0.0.0
-rwxr-xr-x. 1 me me 2986816 Oct  8 16:32 /home/me/local/lib/libsvn_client-1.so.0.0.0

显然,我对这里的共享库有些不理解。大概动态加载器会从次要版本号中选择所需的库,但它们都0在这里。那么这是如何工作的呢?并且肯定svn不会附带全零版本号?Qt5安装是否可能导致问题?有什么方法可以解决这个问题,而不是删除其中一个版本?

标签: linuxsvnshared-librariesldd

解决方案


推荐阅读