包含linux中的库的标准目录(非root)

时间:2014-02-25 03:30:28

标签: linux shared-libraries sudo

我有一个简单的问题。

非root用户是否可以访问标准文件夹来将库复制到其中? 当我尝试在/usr/lib/中复制库时,它会permission denied

sudo正在解决这个问题。但是我想知道如果有办法在没有sudo的情况下执行此操作。

目标是能够在不修改任何env变量的情况下使用库。

1 个答案:

答案 0 :(得分:2)

除非系统管理员提供您可以写入的目录并更新链接加载程序配置(/etc/ld.so.conf/etc/ld.so.conf.d/*)以使用它。不太可能发生,因为这被认为是一种安全风险。

但是,如果要避免必须定义LD_LIBRARY_PATH变量,可以将库安装在您具有写访问权限的任何位置,并在使用它的可执行文件中添加它的路径(RPATH列表中的ELF可执行文件)。

例如,如果使用gcc链接文件,则使用-R选项指定RPATH:

gcc -o<output executable> -R<path to your libraries> -l<your shared library>

然后,您可以在不定义LD_LIBRARY_PATH=<path to your libraries>的情况下运行生成的可执行文件。

您可以使用以下命令从可执行文件中获取ELF RPATH列表:

readelf -a <executable file> | grep RPATH

例如:

# readelf -a ar | grep RPATH
0x0000000f (RPATH)    Library rpath: [/opt/local/i386-sun-solaris2.10/lib]

意味着除了标准系统库目录之外,此版本的ar将在/opt/local/i386-sun-solaris2.10/lib中查找共享库。