$ 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
我正在本地安装几个二进制文件和库,因为我没有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
我已经添加了库$LD_LIBRARY_PATH
的路径,但是如果没有root访问权限,我无法更新ldconfig
缓存...
是否有特定于用户的/etc/ld.so.cache
?
或者更一般地说,是否可以使用用户配置文件"屏蔽"系统配置文件?
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 可执行文件的原因。许多程序都有一种方法来指定覆盖用户配置,一些更复杂的程序也有方法让系统管理员设置不可覆盖的强制设置。