我有一个可执行文件,它需要一个位于/opt/...
文件夹中的共享库。我已将路径包含在下LD_LIBRARY_PATH
并/etc/environment
使用 对其进行了更新source /etc/environment
。当我在没有 root 权限的情况下运行此可执行文件时,我收到一条错误消息libxxx.so: cannot open shared object file: No such file or directory
。但是当我使用 运行它时sudo
,它就可以运行。但是问题是,许可证不在 root 用户下,因此它会引发与许可证相关的错误。我更改了 的权限,以便/opt/...
普通用户可以创建和删除文件。但是,这没有帮助。出了什么问题,我该如何修复它?
答案1
/etc/environment
在登录期间进行解释。因此,查看所做更改的正确方法/etc/environment
是注销并再次登录。
sudo
有效是因为它部分模拟以 root 身份登录(sudo -i
更准确地模拟登录)。
source /etc/environment
不起作用,因为source
是一个 shell 命令,它告诉 shell 将给定的文件解释为 shell 脚本。问题是:/etc/environment
不是shell 脚本。它是环境变量名称-值对的格式为:
name="value"
对于 shell 来说,这一行是全局变量,只有 shell 本身才能看到它。从 shell 执行的程序看不到它。定义环境变量的正确方法是使用export
shell 命令:
export name="value"
因此,如果您确实想在不注销的情况下使用您的全新设备LD_LIBRARY_PATH
,您应该执行以下命令而不是source /etc/environment
:
export LD_LIBRARY_PATH="/opt/..."
更新: LD_LIBRARY_PATH
/etc/environment
由于 而无法设置ssh-agent
。有关详细信息,请参阅错误 #47958以及 Ubuntu 维基页面环境变量. 正如 wiki 页面中所述,存在一种解决方法,即使用/etc/ld.so.conf.d
。
例如,您可以创建/etc/ld.so.conf.d/opt.conf
以下内容:
# Paths for my cool libraries
/opt/...
虽然这被列为一种解决方法,但ld.so.conf.d
实际上是最适合进行此类设置的地方。