在没有root权限的情况下更新ldconfig缓存

Dav*_*hih 12 linux centos shared-libraries library-path ldd

$ uname -a
Linux xhost10.bcgsc.ca 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

$ /sbin/ldconfig --version
ldconfig (GNU libc) 2.5
Run Code Online (Sandbox Code Playgroud)

我在本地安装了几个二进制文件和库,因为我没有root访问权限.

某些程序需要在运行时动态链接到非标准位置的共享库.

执行时,程序返回:

$ path/to/cc1
path/to/cc1: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我已经添加了库的路径$LD_LIBRARY_PATH,但是如果ldconfig没有root访问权限我就无法更新缓存...

是否有用户特定的/etc/ld.so.cache

或者更一般地说,是否可以使用用户配置文件"屏蔽"系统配置文件?

tex*_*ell 5

ldconfig高速缓存仅适用于/etc/ld.so.conf或/etc/ld.so.conf.d中指定的路径。由于这些对于非root用户是不可写的,因此您不能在没有root的帮助下使用它们来提高没有root权限安装的可执行文件的启动速度(但是即使那样,将用户可写的文件添加到这些文件中也是一个坏主意系统范围的库搜索路径)。

因此,对于这些情况,您需要使用LD_LIBRARY_PATH环境变量,或者在依赖于非默认路径中的库的可执行文件或库中使用rpath / runpath。我不知道LD_LIBRARY_PATH和rpath / runpath之间的速度差异,但是rpath / runpath的优点是它们仅影响特定的可执行文件,因此不太可能引起其他程序的问题。

在linux / unix中,没有掩盖系统配置文件并使用用户提供的文件的通用方法。实际上,这是Unix安全模型必须积极避免的事情,以避免各种特权升级。这就是为什么甚至许多环境变量都无法使用suid可执行文件的原因。许多程序都有一种指定覆盖用户配置的方法,一些更复杂的程序也具有系统管理员设置不可覆盖的强制设置的方法。