sudo之后LD_LIBRARY_PATH总是空白


9

每当我似乎手动安装软件时,都会出现共享库错误。执行后,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

该值将被临时设置,但是如果我退出一个终端窗口,它将不会保留该值。重新启动也不执行任何操作。


尝试将其添加到~/.bashrc
Kevdog777


这不是重复的;问题无关紧要,答案不起作用。
持不同政见者愤怒


1
是的,让我使用一年前的损坏软件,而不是让我对其进行更新以测试是否有任何改善的软件。
2014年

Answers:


7

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

vim ~/.bashrc

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

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


2
对一位用户来说很好。对于所有用户呢?
持不同政见者愤怒

2
@DissidentRage:将其添加到/etc/bash.bashrc
JdeHaan 2014年

我将其标记为答案,因为这适用于给定的范围。我该怎么办显然没有在其中运行的文件/etc/ld.so.conf.d
异议者愤怒

1

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

查看ldconfig正在解析的库/目录

ldconfig -v 

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


是的,我很/etc/ld.so.conf早就检查了一下,因为我很好奇它包含的内容。它确实include有线。
持不同政见者愤怒

运行ldconfig -v可能会让您了解为什么不包含该库。您可以运行ldconfig -p以打印当前缓存文件中的库和目录。
pyther 2014年

0

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

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,但是可以根据需要对其进行硬编码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.