清除和重建ldconfig缓存?

46

我正在尝试清除ldconfig库链接缓存。我有一个本地文件夹,新构建的库会被放置在里面。我想更新ldconfig缓存以指向这些新构建的库。

我尝试使用ldconfig -c命令,并给它提供自己的.conf文件。我还尝试替换/ etc / ld.so.conf文件以指向库的新路径。但即使这样做,当我使用ldconfig -p命令检查缓存时,它仍然显示旧库。

因此,如何清除并重新构建ldconfig缓存呢?附加说明:我使用的是Ubuntu 13.10。

3个回答

65

虽然已经晚了2年,但是如果有人碰巧看到了这个问题,就按照以下命令运行su(不要用sudo):

rm /etc/ld.so.cache
ldconfig

似乎对我没有起作用:我执行了上述操作,但仍然需要等待下一次重启,同时“重建动态链接器缓存...” - Hi-Angel
执行rm /etc/ld.so.cache命令后,使用sudo report报错:"sudo: error while loading shared libraries: libaudit.so.1"。 - Crawl.W
@Crawl.W 我在我的回答中提到要以 su 的身份运行它了,不是吗? - codenamezero
1
我执行了 sudo rm /etc/ld.so.cache - Crawl.W
Being su 稍微有些不同于使用 sudo 命令。我假设你运行第二个命令 ldconfig 时遇到了“加载共享库”错误?或者现在不同的发行版做事情的方式不同了。但是当我发布答案时,这就是我需要做的才能让事情正常工作。 - codenamezero

21

重建缓存

以sudo身份打开/etc/ld.so.conf文件,并添加一个新行,加入库目录。在这个例子中,我们添加/usr/local/lib。 重新运行ldconfig来重建缓存:

$ sudo ldconfig

这对我起作用了。


/usr/local/lib 已经存在,我只需要运行 ldconfig 命令,这样新的库就能被找到了。有趣的是,它对于普通用户不可用。没有使用 sudo,它会说不知道 ldconfig - Alexis Wilke
@AlexisWilke 让普通用户使用 ldconfig 会让尝试获取特权升级的乐趣荡然无存。如果你再仔细考虑一下,你就会意识到(我相信你现在已经意识到了)这将构成不必要的安全风险。 - GuyB
@GuyB,许多工具,例如iptables,对于普通用户是可访问的。然后他们告诉你无法获得足够的权限来运行命令。在这种意义上,我认为ldconfig被隐藏起来很奇怪。 - Alexis Wilke
1
@AlexisWilke 好的,我明白了,你指的是可见性本身,而不是权限。可见性由PATH环境变量确定,安装时的默认值取决于发行版。某些发行版对非root用户不会将某些sbin/路径放入PATH中。iptables(xtables-legacy-multi的链接)和ldconfig可能位于不同的sbin/目录中,这又取决于发行版。我使用Mageia,它们对普通用户都是可见的。 - GuyB

3
我通过以下方法解决了这个问题:

$ > /etc/ld.so.cache

然后执行:

$ ldconfig


这样做可以更新动态链接库的缓存,从而解决问题。

谢谢 @Rastalamm,第一个答案对我没用。 - Alexmaister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接