sudo 之后 LD_LIBRARY_PATH 始终为空

sudo 之后 LD_LIBRARY_PATH 始终为空

每当我似乎手动安装软件时,我都会遇到共享库错误。执行后echo $LD_LIBRARY_PATH显示为..没有什么。我尝试添加/usr/local/lib.conf文件中,/etc/ld.so.conf.d但似乎它永远不会执行。

这也不起作用(引号或其他):

LD_LIBRARY_PATH="/usr/local/lib"
export LD_LIBRARY_PATH
sudo ldconfig -v

该值将被临时设置,但如果我退出终端窗口,它也不会保留该值。重新启动也没有任何作用。

答案1

将以下内容添加到您的.bashrc

vim ~/.bashrc

...
export LD_LIBRARY_PATH=/usr/local/lib

这将使您重新启动计算机,并且仍然分配该路径。

答案2

我终于用别名解决了这个问题:

alias sudo='sudo PATH="$PATH" HOME="$HOME" LD_LIBRARY_PATH="$LD_LIBRARY_PATH"'

请务必使用单引号,以便变量在调用时展开,而不是在定义别名时展开。

这:

  • 保留 HOME(否则设置为 /root)
  • 保留 PATH(否则在 suders 中设置为“安全”路径)
  • 保留了当前的LD_LIBRARY_PATH 的值(否则将被清空)

(您可以使用以下命令查看设置的内容sudo bash -c "echo $HOME":)

我正在使用自定义驱动程序,并且始终必须 sudo 我的测试程序才能访问驱动程序。我不想在系统区域安装测试版本的库,因此我使用 LD_LIBRARY_PATH 根据需要设置特定的测试目录。我不能只设置固定的 LD_LIBRARY_PATH,我需要能够更改它并保留当前设置。保留 PATH 和 HOME 使我可以访问我的工作环境 - 脚本和目录结构。

此别名避免了必须在 sudoers 中授予一揽子权限...并且无论 sudoers 设置如何,显然 LD_LIBRARY_PATH 都没有解决方法。 sudo 在脚本内部不起作用,但可以根据需要对它们进行硬编码。

答案3

在 Red Hat Enterprise Linux (RHEL) 6 上,/etc/ld.so.conf包含include ld.so.conf.d/*.conf.如果没有这一行,则/etc/ld.so.conf.d/*.conf永远不会解析 in 中的项目。

查看ldconfig正在解析哪些库/目录

ldconfig -v 

打印当前版本号、扫描的每个目录的名称以及创建的任何链接。

相关内容