2013-07-17 120 views
9
$ 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權限。更新沒有root權限的ldconfig緩存

某些程序需要在運行時動態鏈接到非標準位置的共享庫。

執行時,程序返回:

$ 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,但我不能更新ldconfig緩存,而不根訪問...

是否有用戶具體的/etc/ld.so.cache

或者更一般地說,是否可以通過用戶配置文件'掩蓋'系統配置文件?

+0

我可以通過在〜/ .bashrc中導出LD_LIBRARY_PATH並重新登錄來讓ld.so找到共享庫。運行在LD_LIBRARY_PATH中動態加載庫的二進制文件似乎需要更長的時間來初始化(共享網絡文件系統),但至少它們會運行... –

回答

4

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可執行文件禁用的原因。許多程序都有一種方法來指定重寫用戶配置,一些更復雜的程序也可以讓系統管理員設置不可覆蓋的強制設置。