我有一个简单的问题。
非root用户是否可以访问标准文件夹来将库复制到其中?
当我尝试在/usr/lib/
中复制库时,它会permission denied
。
sudo
正在解决这个问题。但是我想知道如果有办法在没有sudo
的情况下执行此操作。
目标是能够在不修改任何env变量的情况下使用库。
答案 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
中查找共享库。