每当我似乎手动安装软件时,我都会遇到共享库错误。执行后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
打印当前版本号、扫描的每个目录的名称以及创建的任何链接。